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());
}
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);
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)) {
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,
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);
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)
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)