Suggested additional flags for vmoduser to unset flags without having to clear them all. For example
-p = disable popaccess
-P = enable popaccess (capitalized)
For my current purpose i modified vmoduser.c
Line 84 and Line 110 was:
if ( GidFlag != 0 ) mypw->pw_gid |= GidFlag;
Change to:
if ( GidFlag != 0 ) mypw->pw_gid ^= GidFlag;
the flags now flip. it will set if unset and unset if set. This is good enough for my purpose, but a better solution would be preferable. Basically, the |= is changed to ^=.
There's a pair of bug/patch tracker items about this, and I've recommended toggling, but I'm not sure if
there are systems out there that assume that a flag always sets, and never clears.
Comments?
I've modified it further. -p now sets it and +p clears it. getopt doesn't normally support the + operator, but i modify the argv array before giving it to getopt. The reason we want to toggle is that as a host sometimes we want to selectively disable certain functionalities without having it affect others.
Are there systems still where modification of argv is not allowed? The implementation of the +/- operators
looks good to me if one always sets and one always unsets.
Toggle is bad -- people may be calling this program from a script set up to automatically disable a service. In that case, if it's already disabled, it should do nothing.
Adding additional command-line options would be great. If necessary, we could create a new program and revamp the command-line options entirely or use some double-dash options. How about --flags=pSw (disable pop and webmail, enable SMTP)? Wouldn't even need to be the same flags as the other command line options.
If we still have some digit options (like the USER1, USER2, USER3, USER4 flags?), the upper/lowercase trick doesn't work.
It's verbose, but "--enable-smtp --disable-pop --enable-webmail --disable-user1" is pretty clear.
See attachment, it allows the setting and unsetting of all the flags. It makes sure when unsetting something that is already unset remains unset. It uses the same method as above to set / unset flags and modifies argv to allow the use of the + operator. It then translates the + to the corresponding - flag. This patch works for all the flags.
File Added: vmoduser.c
I'm not aware of such a system, but they could exist. On the other hand, only administrators would be using these options -p +p and i suppose they should know what they're doing?
As discussed on the list, this will most likely become a new command with full length flag names.
New binary added to 5.5 branch to address this