uint_8 auth_user_permission(char *dir,char *user) { int uid; uid=get_uid_by_name(user); if (uid==S_NO_USER||uid==S_PASS_ERROR) return 0; else return auth_permission(dir,uid); }
int set_uid_by_name(const char* username) { int uid = get_uid_by_name(username) ; if(uid < 0) return -1 ; return setuid(uid) ; }
int main() { map_init(); auth_init(); printf("%d\n",get_uid_by_name("zwz")); printf("%d\n",get_uid_by_name("zwzmzd")); printf("%d\n",get_uid_by_name("nishi")); printf("%d\n",auth_user("zwz","aaa")); printf("%d\n",auth_user("iii","aaa")); printf("%d\n",auth_user("zwz","mzd")); auth_permission("/pro",1); auth_permission("/",1); auth_permission("/a/a/a/a/a",1); printf("%x\n",auth_permission("/pp",1)); return 0; }
bool dropPrivileges(const char* group_name, const char* user_name) { uid_t uid=get_uid_by_name(user_name); gid_t gid=get_gid_by_name(group_name); // change them permanently if (setregid(gid, gid) == -1) { writeLog(WARNING, "can't set gid=%d errno=%d", gid, errno); return false; } if (setreuid(uid, uid) == -1) { writeLog(WARNING, "can't set uid=%d errno=%d", uid, errno); return false; } return true; }
void auth_init() { FILE *fp; static char uname[USERNAME_LEN+1]; static char dir[DIR_LEN+1]; static char per[DIR_LEN+1]; printf("*** AUTH SYSTEM INIT START ***\n"); pthread_mutex_init(&auth_lock,0); fp=fopen(passwd_file,"r"); if (fp==0) printf("passwd NOT EXISTS\n"); else { //printf("USER:\n"); while (!feof(fp)) { MALLOC(struct auth_profile,p); fscanf(fp,"%s",uname); if (feof(fp)) break; fscanf(fp,"%s",p->pass); p->uid=uid_alloc(); map_insert(uname,(int)p); //printf("%s %s\n",uname,p->pass); } printf("passwd READ COMPLETE\n"); fclose(fp); } fp=fopen(permission_file,"r"); if (fp==0) printf("permission NOT EXISTS\n"); else { while (!feof(fp)) { fscanf(fp,"%s",dir); if (feof(fp)) break; fix_dir(dir); while (1) { int uid; fscanf(fp,"%s",uname); if (auth_strcmp(uname,"[end]")) break; fscanf(fp,"%s",per); uid=get_uid_by_name(uname); if (uid>0) { uint_8 mask=give_permission_mask(per); map_insert(storage(dir,uid),mask); //printf("DIR:%s %s %x\n",dir,per,mask); } } } printf("permission READ COMPLETE\n"); fclose(fp); } printf("*** AUTH SYSTEM INIT COMPLETE ***\n\n"); }
int auth_get_uid(char *user) { return get_uid_by_name(user); }