summaryrefslogtreecommitdiffstats
path: root/src/Hooks/CCpp.cpp
Commit message (Collapse)AuthorAgeFilesLines
* moved get_cmdline() and daemon_is_ok() to abrtlibKarel Klic2009-12-181-122/+0
|
* large file support for whole abrtKarel Klic2009-12-181-8/+0
|
* src/Hooks/CCpp.cpp: use and honour %c (core limit size).Denys Vlasenko2009-12-161-73/+98
| | | | | | | Makes MakeCompatCore = yes much more frielndly - now users with ulimit -c 0 won't get unwanted coredumps. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* fix all instances of atoi() usageDenys Vlasenko2009-12-151-13/+14
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* add paranoia checks on setuid/setgidDenys Vlasenko2009-12-141-3/+8
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* abrtd: add comment about ccpp/abrtd raceDenys Vlasenko2009-12-101-1/+1
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* ccpp hook: reanme it, and add "crash storm protection" (see rhbz#542003)Denys Vlasenko2009-11-301-6/+36
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* Hooks/CCpp.cpp: cosmetics after last big commitDenys Vlasenko2009-11-271-38/+38
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* Hooks/CCpp.cpp: add MakeCompatCore = yes/no directive. Fixes rhbz#541707Denys Vlasenko2009-11-271-35/+185
| | | | | | Run tested Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* hookCCpp: check total dump dir size and delete the largest/oldest oneDenys Vlasenko2009-11-261-2/+53
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* src/Hooks/CCpp.cpp: print signal name; document future work in commentsDenys Vlasenko2009-11-231-2/+14
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* src/Hooks/CCpp.cpp: do save abrtd's own coredumps, but carefully...Denys Vlasenko2009-11-231-7/+27
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* CCpp.cpp: quote parameters if needed. closes 540164Denys Vlasenko2009-11-231-31/+69
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* whitespace cleanupsDenys Vlasenko2009-11-181-1/+1
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* src/Hooks/CCpp.cpp: clarify error messageDenys Vlasenko2009-11-121-7/+5
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* src/Hooks/CCpp.cpp: detect write errors (close() return value); more loggingDenys Vlasenko2009-11-121-5/+5
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* make exception handling lighterDenys Vlasenko2009-11-061-1/+1
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* mass replace of const string& params by const char*Denys Vlasenko2009-11-061-1/+1
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* lib/Plugins/Logger: much more sane dump format; fix misdetection of text filesDenys Vlasenko2009-10-301-11/+20
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* lib/Plugins/CCpp.cpp: do not use temp file for gdb commands - use -ex CMD ↵Denys Vlasenko2009-10-131-1/+2
| | | | | | instead Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* fix the bug where lock file was not removedDenys Vlasenko2009-09-091-1/+0
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* silly whitespace fixDenys Vlasenko2009-08-061-1/+1
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* fix vda's breakage: coredumps should be 644, not 600Denys Vlasenko2009-08-061-1/+5
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* CDebugDump::Create(pDir, pUID): make 2nd param uid_t, not stringDenys Vlasenko2009-08-051-1/+1
|
* Hooks/CCpp.cpp: don't dump executables with "/abrt" substring in the nameDenys Vlasenko2009-08-051-37/+56
| | | | | | some cleanups and abrtlib work crept in too... Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* open with O_CREAT must have 3 args, fixing thatDenys Vlasenko2009-08-051-1/+1
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* simplify C/C++ hookDenys Vlasenko2009-08-051-75/+48
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* using more x-functionsDenys Vlasenko2009-07-311-2/+2
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* add utility functionsDenys Vlasenko2009-07-301-10/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Logging machinery provided by this patch consists of several functions: +extern void error_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))); +extern void error_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2))); +extern void perror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2))); +extern void perror_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2))); +/* This is a macro since it collides with log() from math.h */ +#undef log +#define log(...) error_msg(__VA_ARGS__) They are taking printf-style format strings. perror_msg_xxx functions append an errno string after the message: "xxx xxx xxx: No such file or directory" if errno is != 0. xxx_and_die functions do not return. All functions also ensure that the message ends with "\n", meaning that you do not need to add it into the message, but if you do, an extra "\n" will not be added. All functions ensure that the string is written in a single write() call, thus if two processes output to the same terminal or file, messages don't get intermingled. Ordinarily, messages go to the stderr. By setting global variable "logmode" to LOGMODE_SYSLOG or LOGMODE_NONE, they can be sent to syslog or be suppressed. Standard setting is LOGMODE_STDIO. LOGMODE_STDIO + LOGMODE_SYSLOG works too. Usually it is set by main() as needed, and then you can fearlessly use [p]error_msg[_and_die]() and be sure that message goes to the right place. +enum { + LOGMODE_NONE = 0, + LOGMODE_STDIO = (1 << 0), + LOGMODE_SYSLOG = (1 << 1), + LOGMODE_BOTH = LOGMODE_SYSLOG + LOGMODE_STDIO, +}; +extern int logmode; Exit code of xxx_and_die variants is controlled by the global variable +extern int xfunc_error_retval; By default it is = 1. Logging infrastructure uses a few other functions, which I find useful on their own, and since I discussed them with Zdenek and he thinks that they may be useful too, they are included in the patch also. The first group is "malloc or die" group: +void* malloc_or_warn(size_t size); +void* xmalloc(size_t size); +void* xrealloc(void *ptr, size_t size); +void* xzalloc(size_t size); +char* xstrdup(const char *s); +char* xstrndup(const char *s, int n); They are basically versions of malloc etc which exit on failure. The next group are simple I/O wrappers: +extern ssize_t safe_read(int fd, void *buf, size_t count); +extern ssize_t full_read(int fd, void *buf, size_t count); +extern void xread(int fd, void *buf, size_t count); +extern ssize_t safe_write(int fd, const void *buf, size_t count); +extern ssize_t full_write(int fd, const void *buf, size_t count); safe_xxx deal with the fact that read and write operations may "fail" with EINTR and in many cases we want to just repeat the operation. full_xxx deal with the fact that read and write are not guaranteed to read or write exact amount, they may to transfer less bytes. In this case we need to loop. The next group are the "x functions": +extern void xwrite(int fd, const void *buf, size_t count); +extern void xwrite_str(int fd, const char *str); +void xpipe(int filedes[2]); +void xdup2(int from, int to); +off_t xlseek(int fd, off_t offset, int whence); +void xsetenv(const char *key, const char *value); +int xsocket(int domain, int type, int protocol); +void xbind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen); +void xlisten(int s, int backlog); +ssize_t xsendto(int s, const void *buf, size_t len, const struct sockaddr *to, socklen_t tolen); +void xstat(const char *name, struct stat *stat_buf); +void xmove_fd(int from, int to); +char* xasprintf(const char *format, ...); They are similar to xmalloc in a sense that they exit on the failure. Most of them closely resemble corresponding libc functions. xmove_fd() is a wrapper for typical idiom "if (fd1!=fd2) dup2(fd1,fd2)", with error checking on dup2 failure added. xasprintf() is a "strcat on steroids". It's a printf-like function which returns a malloced string. In my experience, it is surprisingly useful: it makes complex concatenations easy in C. All these functions are declared in a new header, inc/abrtlib.h. It also contains a list of #includes: +#include <ctype.h> +#include <dirent.h> +#include <errno.h> +#include <fcntl.h> +#include <inttypes.h> +#include <setjmp.h> +#include <signal.h> +#include <stdio.h> +#include <stdlib.h> +#include <stdarg.h> +#include <stddef.h> +#include <string.h> +#include <sys/poll.h> +#include <sys/mman.h> +#include <sys/socket.h> +#include <sys/stat.h> +#include <sys/time.h> +#include <sys/types.h> +#include <sys/wait.h> +#include <termios.h> +#include <time.h> +#include <unistd.h> +/* Try to pull in PATH_MAX */ +#include <limits.h> +#include <sys/param.h> +#ifndef PATH_MAX +# define PATH_MAX 256 +#endif +#include <pwd.h> +#include <grp.h> The rationale to do so is that these headers are pretty standard, and by having them included in this one file, we won't need to add #includes into many .c[pp] files later. The slowdown from gcc parsing these headers even if they are not needed is not worth spending time on optimizing out. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* Be more paranoid about /proc/.../core_patternDenys Vlasenko2009-07-251-0/+4
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* fix several resource leaks on error pathsDenys Vlasenko2009-07-221-17/+16
| | | | Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
* fixed security issueZdenek Prikryl2009-06-301-3/+2
| | | | User can read only his debugdump directories
* hook writes new dump only if the daemin is runningZdenek Prikryl2009-06-171-0/+41
|
* added item which tells what happens in guiZdenek Prikryl2009-05-131-0/+1
|
* new commlayerinner interfaceZdenek Prikryl2009-04-281-6/+7
|
* renamed MW libraryZdenek Prikryl2009-04-081-10/+19
| | | | | | renamed Utils library added check for plugins init method renamed crash types
* rewritten CDebugDump and CrashTypesZdenek Prikryl2009-04-011-18/+77
|
* replaced language and application plugins by analyzer pluginZdenek Prikryl2009-03-191-1/+1
| | | | | added action plugin simplify plugin iface
* replace old project name by new oneZdenek Prikryl2009-03-041-1/+1
|
* Rewritten CCpp hook and removed dealock in DebugDumps lib (zprikryl)Jiri Moskovcak2009-02-281-26/+28
|
* added other signalsZdenek Prikryl2009-02-261-1/+5
|
* rewrote loggingZdenek Prikryl2009-02-191-1/+3
|
* new logic of getting package nameZdenek Prikryl2009-02-181-1/+0
|
* added syslogZdenek Prikryl2009-02-121-1/+8
|
* added lock functionality to DebugDumpZdenek Prikryl2009-02-121-0/+1
|
* added mandatory calls for getting package names etcZdenek Prikryl2009-02-121-1/+3
|
* fixed typos and removed time() checksZdenek Prikryl2009-02-111-10/+3
|
* hook doesn't need time as a parameterZdenek Prikryl2009-02-111-10/+16
|
* tabs are replaced by spacesZdenek Prikryl2009-02-041-57/+57
|
* Initial git commitJiri Moskovcak2009-02-021-0/+94