+int Bank_GetUserFlags(int ID)
+{
+ if( ID < 0 || ID >= giBank_NumUsers )
+ return -1;
+
+ // TODO: Implement checking the PAM groups and status instead, then
+ // fall back on the database. (and update if there is a difference)
+
+ // root
+ if( gaBank_Users[ID].UnixID == 0 ) {
+ gaBank_Users[ID].Flags &= ~USER_FLAG_TYPEMASK;
+ gaBank_Users[ID].Flags |= USER_TYPE_WHEEL;
+ }
+
+ #if USE_UNIX_GROUPS
+ if( gaBank_Users[ID].UnixID > 0 )
+ {
+ struct passwd *pwd;
+ struct group *grp;
+ int i;
+
+ // Get username
+ pwd = getpwuid( gaBank_Users[ID].UnixID );
+
+ // Check for additions to the "coke" group
+ grp = getgrnam("coke");
+ if( grp ) {
+ for( i = 0; grp->gr_mem[i]; i ++ )
+ {
+ if( strcmp(grp->gr_mem[i], pwd->pw_name) == 0 )
+ {
+ gaBank_Users[ID].Flags &= ~USER_FLAG_TYPEMASK;
+ gaBank_Users[ID].Flags |= USER_TYPE_COKE;
+ }
+ }
+ }
+
+ // Check for additions to the "wheel" group
+ grp = getgrnam("wheel");
+ if( grp ) {
+ for( i = 0; grp->gr_mem[i]; i ++ )
+ {
+ if( strcmp(grp->gr_mem[i], pwd->pw_name) == 0 )
+ {
+ gaBank_Users[ID].Flags &= ~USER_FLAG_TYPEMASK;
+ gaBank_Users[ID].Flags |= USER_TYPE_WHEEL;
+ }
+ }
+ }
+ }
+ #endif
+
+ return gaBank_Users[ID].Flags;
+}
+