On Fri, Jan 04, 2013 at 02:39:04AM +0100, Wouter Verhelst wrote:
> On Thu, Jan 03, 2013 at 11:21:05PM +0200, Tuomas Jorma Juhani Räsänen wrote:
> > User and group names are needed only at the very beginning of the
> > process, there is no need to keep them hanging in the global scope.
> > 
> > Signed-off-by: Tuomas Jorma Juhani Räsänen <[email protected]>
> > ---
> >  nbd-server.c |   26 ++++++++++++--------------
> >  1 file changed, 12 insertions(+), 14 deletions(-)
> > 
> > diff --git a/nbd-server.c b/nbd-server.c
> > index 82490fe..a2f64ea 100644
> > --- a/nbd-server.c
> > +++ b/nbd-server.c
> > @@ -116,10 +116,6 @@
> >  /** Where our config file actually is */
> >  gchar* config_file_pos;
> >  
> > -/** What user we're running as */
> > -gchar* runuser=NULL;
> > -/** What group we're running as */
> > -gchar* rungroup=NULL;
> >  /** global flags */
> >  int glob_flags=0;
> >  
> > @@ -2621,24 +2617,24 @@ void daemonize(SERVER* serve) {
> >  /**
> >   * Set up user-ID and/or group-ID
> >   **/
> > -void dousers(void) {
> > +void dousers(const gchar *const username, const gchar *const groupname) {
> >     struct passwd *pw;
> >     struct group *gr;
> >     gchar* str;
> > -   if(rungroup) {
> > -           gr=getgrnam(rungroup);
> > +   if (groupname) {
> > +           gr = getgrnam(groupname);
> >             if(!gr) {
> > -                   str = g_strdup_printf("Invalid group name: %s", 
> > rungroup);
> > +                   str = g_strdup_printf("Invalid group name: %s", 
> > groupname);
> >                     err(str);
> >             }
> >             if(setgid(gr->gr_gid)<0) {
> >                     err("Could not set GID: %m"); 
> >             }
> >     }
> > -   if(runuser) {
> > -           pw=getpwnam(runuser);
> > +   if (username) {
> > +           pw = getpwnam(username);
> >             if(!pw) {
> > -                   str = g_strdup_printf("Invalid user name: %s", runuser);
> > +                   str = g_strdup_printf("Invalid user name: %s", 
> > username);
> >                     err(str);
> >             }
> >             if(setuid(pw->pw_uid)<0) {
> > @@ -2705,8 +2701,6 @@ int main(int argc, char *argv[]) {
> >     
> >          /* Update global variables with parsed values. This will be
> >           * removed once we get rid of global configuration variables. */
> > -        runuser       = genconf.user ? genconf.user : runuser;
> > -        rungroup      = genconf.group ? genconf.group : rungroup;
> >          modern_listen = genconf.modernaddr ? genconf.modernaddr : 
> > modern_listen;
> >          modernport    = genconf.modernport ? genconf.modernport : 
> > modernport;
> >          glob_flags   |= genconf.flags;
> > @@ -2759,6 +2753,10 @@ int main(int argc, char *argv[]) {
> >     if (!dontfork)
> >             daemonize(serve);
> >     setup_servers(servers);
> > -   dousers();
> > +   dousers(genconf.user, genconf.group);
> > +
> > +        g_free(genconf.user);
> > +        g_free(genconf.group);
> 
> why?

genconf.user and genconf.group are strings allocated by
g_key_file_get_string(), they need to be freed at some point, and
after this point, no one ever cares about them anymore: dousers() is
the only function interested in user and group names.

-- 
Tuomas

------------------------------------------------------------------------------
Master HTML5, CSS3, ASP.NET, MVC, AJAX, Knockout.js, Web API and
much more. Get web development skills now with LearnDevNow -
350+ hours of step-by-step video tutorials by Microsoft MVPs and experts.
SALE $99.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122812
_______________________________________________
Nbd-general mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/nbd-general

Reply via email to