Bug#293124: asterisk does not start from init script with high priority

Florian Weimer Florian Weimer <fw@deneb.enyo.de>, 293124@bugs.debian.org
Wed, 02 Feb 2005 23:57:45 +0100


* Florian Weimer:

> * Kilian Krause:
>
>> yes, that's due to the fact that some other users complained about the
>> -U and -G not working effectively enough for their needs. The dilemma is
>> that either we let asterisk drop privileges *AFTER* setting realtime
>> prio (launching as root and being limited to one group), or we switch to
>> that asterisk user *BEFORE* launching asterisk (and getting all the
>> groups, but asterisk user cannot set realtime-prio).
>>
>> Any solution that does address both issues is welcome.
>
> In the process of dropping privileges, you should call initgroups to
> set the supplemental groups list.

I've been asked to provide a patch, here is it (well, sort of,
completely untested, you know the drill):


Before the following code snippet in asterisk.c

  if (setuid(pw->pw_uid)) {
  	ast_log(LOG_WARNING, "Unable to setuid to %d (%s)\n", pw->pw_uid, runuser);
  	exit(1);
  }

insert this code:

  if (initgroups(runuser, pw->pw_gid)) {
  	ast_log(LOG_WARNING, "Unable to initialize supplementary group list for %s\n", runuser);
  	exit(1);
  }
  if (setgid(pw->pw_gid)) {
  	ast_log(LOG_WARNING, "Unable to setgid to %d\n", pw->pw_gid);
  	exit(1);
  }

You might want to guard the new if statements with

  if (!rungroup) {
    ...
  }

Otherwise the -G option is no longer effective if the -U option is
present.