]> git.tuebingen.mpg.de Git - paraslash.git/commitdiff
Merge commit 'meins/maint' into maint
authorAndre Noll <maan@systemlinux.org>
Fri, 23 Oct 2009 08:38:17 +0000 (10:38 +0200)
committerAndre Noll <maan@systemlinux.org>
Fri, 23 Oct 2009 08:38:17 +0000 (10:38 +0200)
daemon.c
fecdec_filter.c
user_list.c

index 3bcb6e019a442ddf7a8709759937a7d2bd603bf6..011ece6d3d7689b34e793fb4b00f813afc324fc2 100644 (file)
--- a/daemon.c
+++ b/daemon.c
@@ -269,7 +269,11 @@ void drop_privileges_or_die(const char *username, const char *groupname)
                exit(EXIT_FAILURE);
        }
        PARA_INFO_LOG("dropping root privileges\n");
-       setuid(p->pw_uid);
+       if (setuid(p->pw_uid) < 0) {
+               PARA_EMERG_LOG("failed to set effective user ID (%s)",
+                       strerror(errno));
+               exit(EXIT_FAILURE);
+       }
        PARA_DEBUG_LOG("uid: %d, euid: %d\n", (int)getuid(), (int)geteuid());
 }
 
@@ -327,7 +331,7 @@ __printf_2_3 void para_log(int ll, const char* fmt,...)
        FILE *fp;
        struct tm *tm;
        time_t t1;
-       char *color, str[MAXLINE] = "";
+       char *color;
 
        ll = PARA_MIN(ll, NUM_LOGLEVELS - 1);
        ll = PARA_MAX(ll, LL_DEBUG);
@@ -338,11 +342,11 @@ __printf_2_3 void para_log(int ll, const char* fmt,...)
        color = daemon_test_flag(DF_COLOR_LOG)? me->log_colors[ll] : NULL;
        if (color)
                fprintf(fp, "%s", color);
-       if (daemon_test_flag(DF_LOG_TIME)) {
-               /* date and time */
+       if (daemon_test_flag(DF_LOG_TIME)) { /* print date and time */
+               char str[100];
                time(&t1);
                tm = localtime(&t1);
-               strftime(str, MAXLINE, "%b %d %H:%M:%S", tm);
+               strftime(str, sizeof(str), "%b %d %H:%M:%S", tm);
                fprintf(fp, "%s ", str);
        }
        if (daemon_test_flag(DF_LOG_HOSTNAME)) {
index a7290e6aa41a57570828c0968643c760a4e2e38e..a393a230e436bbacbdd367a6d26032eb20292090 100644 (file)
@@ -262,6 +262,7 @@ enum fec_group_usability {
        FEC_GROUP_UNUSABLE,
        FEC_GROUP_USABLE,
        FEC_GROUP_USABLE_SKIP_HEADER,
+       FEC_GROUP_USABLE_WITH_HEADER
 };
 
 static enum fec_group_usability group_is_usable(struct fecdec_group *fg,
@@ -279,14 +280,14 @@ static enum fec_group_usability group_is_usable(struct fecdec_group *fg,
        if (fg->h.bos)
                return FEC_GROUP_USABLE;
        if (fg->h.audio_header_size)
-               return FEC_GROUP_USABLE;
+               return FEC_GROUP_USABLE_WITH_HEADER;
        return FEC_GROUP_UNUSABLE;
 }
 
 static int decode_group(struct fecdec_group *fg, struct filter_node *fn)
 {
        int i, ret, sb = fg->h.slice_bytes;
-       size_t written = 0, need;
+       size_t written, need;
        struct private_fecdec_data *pfd = fn->private_data;
        enum fec_group_usability u = group_is_usable(fg, pfd);
 
@@ -317,6 +318,21 @@ static int decode_group(struct fecdec_group *fg, struct filter_node *fn)
                PARA_INFO_LOG("increasing fec buf to %zu\n", fn->bufsize);
                fn->buf = para_realloc(fn->buf, fn->bufsize);
        }
+       if (u == FEC_GROUP_USABLE_WITH_HEADER) {
+               PARA_INFO_LOG("writing audio file header\n");
+               written = 0;
+               for (i = 0; i < fg->h.data_slices_per_group; i++) {
+                       size_t n = sb;
+                       if (written >= fg->h.audio_header_size)
+                               break;
+                       if (sb + written > fg->h.audio_header_size)
+                               n = fg->h.audio_header_size - written;
+                       memcpy(fn->buf + fn->loaded, fg->data[i], n);
+                       fn->loaded += n;
+                       written += n;
+               }
+       }
+       written = 0;
        for (; i < fg->h.data_slices_per_group; i++) {
                size_t n = sb;
                if (n + written > fg->h.group_bytes)
index 63bfdfc259878402f3f70c2a5c62be5d5fa96ce9..f5aabc0979fa8d1feb1e60722cfd00451d5dfe1a 100644 (file)
@@ -39,7 +39,7 @@ static void populate_user_list(char *user_list_file)
                struct user *u;
                RSA *rsa;
 
-               ret = para_fgets(line, MAXLINE, file_ptr);
+               ret = para_fgets(line, sizeof(line), file_ptr);
                if (ret <= 0)
                        break;
                if (sscanf(line,"%200s %200s %200s %200s", w, n, k, p) < 3)