📄 voracle.pc
字号:
#ifdef ENABLE_AUTH_LOGGING qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "delete from lastauth where pw_domain = '%s'", domain ); EXEC SQL PREPARE S FROM :SqlBufUpdate; EXEC SQL EXECUTE S; EXEC SQL COMMIT;#endif vdel_limits(domain); return(0);}int vauth_deluser( char *user, char *domain ){ char *tmpstr; int err = 0; if ( (err=vauth_open_update()) != 0 ) return(err); vset_default_domain( domain );#ifndef MANY_DOMAINS if ( domain == NULL || domain[0] == 0 ) { tmpstr = ORACLE_LARGE_USERS_TABLE; } else { tmpstr = vauth_munch_domain( domain ); }#else tmpstr = ORACLE_DEFAULT_TABLE;#endif qnprintf( SqlBufUpdate, SQL_BUF_SIZE, DELETE_USER, tmpstr, user#ifdef MANY_DOMAINS, domain#endif ); EXEC SQL PREPARE S FROM :SqlBufUpdate; EXEC SQL EXECUTE S; EXEC SQL COMMIT;#ifdef ENABLE_AUTH_LOGGING qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "delete from lastauth where pw_user = '%s' and pw_domain = '%s'", user, domain ); EXEC SQL PREPARE S FROM :SqlBufUpdate; EXEC SQL EXECUTE S; EXEC SQL COMMIT;#endif return(err);}int vauth_setquota( char *username, char *domain, char *quota){ char *tmpstr; int err; if ( strlen(username) > MAX_PW_NAME ) return(VA_USER_NAME_TOO_LONG);#ifdef USERS_BIG_DIR if ( strlen(username) == 1 ) return(VA_ILLEGAL_USERNAME);#endif if ( strlen(domain) > MAX_PW_DOMAIN ) return(VA_DOMAIN_NAME_TOO_LONG); if ( strlen(quota) > MAX_PW_QUOTA ) return(VA_QUOTA_TOO_LONG); if ( (err=vauth_open_update()) != 0 ) return(err); vset_default_domain( domain );#ifndef MANY_DOMAINS tmpstr = vauth_munch_domain( domain );#else tmpstr = ORACLE_DEFAULT_TABLE; #endif qnprintf( SqlBufUpdate, SQL_BUF_SIZE, SETQUOTA, tmpstr, quota, username#ifdef MANY_DOMAINS, domain#endif); EXEC SQL PREPARE S FROM :SqlBufUpdate; EXEC SQL EXECUTE S; EXEC SQL COMMIT; return(0);}struct vqpasswd *vauth_getall(char *domain, int first, int sortit){ char *domstr = NULL; static struct vqpasswd vpw; static int more = 0; int err; vset_default_domain( domain );#ifdef MANY_DOMAINS domstr = ORACLE_DEFAULT_TABLE; #else domstr = vauth_munch_domain( domain );#endif if ( first == 1 ) { if ( (err=vauth_open_update()) != 0 ) return(NULL); qnprintf(SqlBufRead, SQL_BUF_SIZE, GETALL, domstr#ifdef MANY_DOMAINS ,domain#endif ); if ( sortit == 1 ) { strncat( SqlBufRead, " order by pw_name", SQL_BUF_SIZE); }/* if (res_read!=NULL) mysql_free_result(res_read_getall); res_read = NULL; if (mysql_query(&mysql_read_getall,SqlBufRead)) { printf("vmysql: sql error[5]: %s\n", mysql_error(&mysql_update)); return(NULL); } if (!(res_read_getall=mysql_store_result(&mysql_read_getall))) { printf("vsql_getpw: store result failed 2\n"); return(NULL); }*/ } else if ( more == 0 ) { return(NULL); } memset(IUser, 0, sizeof(IUser)); memset(IPass, 0, sizeof(IPass)); memset(IGecos, 0, sizeof(IGecos)); memset(IDir, 0, sizeof(IDir)); memset(IShell, 0, sizeof(IShell)); memset(IClearPass, 0, sizeof(IClearPass)); vpw.pw_name = IUser; vpw.pw_passwd = IPass; vpw.pw_gecos = IGecos; vpw.pw_dir = IDir; vpw.pw_shell = IShell; vpw.pw_clear_passwd = IClearPass; /* if ((row_getall = mysql_fetch_row(res_read_getall)) != NULL) { strncpy(vpw.pw_name,row_getall[0],SMALL_BUFF); if (row_getall[1]!=0) strncpy(vpw.pw_passwd,row_getall[1],SMALL_BUFF); if (row_getall[2]!=0) vpw.pw_uid = atoi(row_getall[2]); if (row_getall[3]!=0) vpw.pw_gid = atoi(row_getall[3]); if (row_getall[4]!=0) strncpy(vpw.pw_gecos,row_getall[4],SMALL_BUFF); if (row_getall[5]!=0) strncpy(vpw.pw_dir,row_getall[5],SMALL_BUFF); if (row_getall[6]!=0) { strncpy(vpw.pw_shell, row_getall[6],SMALL_BUFF); }#ifdef CLEAR_PASS if (row_getall[7]!=0) { strncpy(vpw.pw_clear_passwd, row_getall[7],SMALL_BUFF); }#endif more = 1; return(&vpw); } more = 0; mysql_free_result(res_read_getall); res_read_getall = NULL;*/ return(NULL);}void vauth_end_getall(){/* if ( res_read_getall != NULL ) { mysql_free_result(res_read_getall); } res_read_getall = NULL;*/}char *vauth_munch_domain( char *domain ){ int i; static char tmpbuf[50]; if ( domain == NULL || domain[0] == 0 ) return(domain); for(i=0;domain[i]!=0;++i){ tmpbuf[i] = domain[i]; if ( domain[i] == '.' || domain[i] == '-' ) { tmpbuf[i] = ORACLE_DOT_CHAR; } } tmpbuf[i] = 0; return(tmpbuf);}int vauth_setpw( struct vqpasswd *inpw, char *domain ){ char *tmpstr; uid_t myuid; uid_t uid; gid_t gid; int err; err = vcheck_vqpw(inpw, domain); if ( err != 0 ) return(err); vget_assign(domain,NULL,156,&uid,&gid); myuid = geteuid(); if ( myuid != 0 && myuid != uid ) { return(VA_BAD_UID); } if ( (err=vauth_open_update()) != 0 ) return(err); vset_default_domain( domain );#ifndef MANY_DOMAINS tmpstr = vauth_munch_domain( domain );#else tmpstr = ORACLE_DEFAULT_TABLE; #endif qnprintf( SqlBufUpdate,SQL_BUF_SIZE,SETPW, tmpstr, inpw->pw_passwd, inpw->pw_uid, inpw->pw_gid, inpw->pw_gecos, inpw->pw_dir, inpw->pw_shell, #ifdef CLEAR_PASS inpw->pw_clear_passwd,#endif inpw->pw_name#ifdef MANY_DOMAINS ,domain#endif );/*printf("add user: %s\n", SqlBufUpdate);*/ EXEC SQL PREPARE S FROM :SqlBufUpdate; EXEC SQL EXECUTE S; EXEC SQL COMMIT;#ifdef SQWEBMAIL_PASS vsqwebmail_pass( inpw->pw_dir, inpw->pw_passwd, uid, gid);#endif return(0);}#ifdef POP_AUTH_OPEN_RELAYvoid vopen_smtp_relay(){ char *ipaddr; time_t mytime; int err; mytime = time(NULL); ipaddr = getenv("TCPREMOTEIP"); if ( ipaddr == NULL ) { return; } if ( ipaddr != NULL && ipaddr[0] == ':') { ipaddr +=2; while(*ipaddr!=':') ++ipaddr; ++ipaddr; } if ( (err=vauth_open_update()) != 0 ) return; qnprintf( SqlBufUpdate, SQL_BUF_SIZE,"insert into relay ( ip_addr, timestamp ) values ( '%s', %d )", ipaddr, (int)mytime); /*fprintf(stderr, "relay: %s\n", SqlBufUpdate);*/ EXEC SQL PREPARE S FROM :SqlBufUpdate; EXEC SQL EXECUTE S; EXEC SQL COMMIT; return;}void vupdate_rules(int fdm){ if (vauth_open_update() != 0) return; sprintf(SqlBufUpdate, "select ip_addr from relay"); EXEC SQL PREPARE SF FROM :SqlBufUpdate; EXEC SQL DECLARE CF CURSOR FOR SF; EXEC SQL OPEN CF; for(;;) { EXEC SQL FETCH CF INTO :Vip_addr; if (sqlca.sqlcode == 1403) break; sprintf(SqlBufUpdate, "%s:allow,RELAYCLIENT=\"\"\n", Vip_addr); write(fdm,SqlBufUpdate, strlen(SqlBufUpdate)); }}void vclear_open_smtp(time_t clear_minutes, time_t mytime){ time_t delete_time; int err; if ( (err=vauth_open_update()) != 0 ) return; delete_time = mytime - clear_minutes; snprintf( SqlBufUpdate, SQL_BUF_SIZE, "delete from relay where timestamp <= %d", (int)delete_time); EXEC SQL PREPARE S FROM :SqlBufUpdate; EXEC SQL EXECUTE S; EXEC SQL COMMIT;}void vcreate_relay_table(){ if (vauth_open_update() != 0) return; snprintf( SqlBufCreate, SQL_BUF_SIZE, "create table relay ( %s )",RELAY_TABLE_LAYOUT); EXEC SQL PREPARE S FROM :SqlBufCreate; EXEC SQL EXECUTE S; EXEC SQL COMMIT; return;}#endifint vmkpasswd( char *domain ){ return(0);}void vclose(){ if (update_open == 1 ) { update_open = 0; EXEC SQL ROLLBACK RELEASE; }}#ifdef IP_ALIAS_DOMAINSvoid vcreate_ip_map_table(){ if ( vauth_open_update() != 0 ) return; snprintf(SqlBufCreate, SQL_BUF_SIZE, "create table ip_alias_map ( %s )", IP_ALIAS_TABLE_LAYOUT); EXEC SQL PREPARE S FROM :SqlBufCreate; EXEC SQL EXECUTE S; EXEC SQL COMMIT; return;}int vget_ip_map( char *ip, char *domain, int domain_size){ int ret = -1; if ( ip == NULL || strlen(ip) <= 0 ) return(-1); if ( domain == NULL ) return(-2); if ( vauth_open_update() != 0 ) return(-3); qnprintf(SqlBufRead, SQL_BUF_SIZE, "select domain from ip_alias_map where ip_addr = '%s'", ip); if (mysql_query(&mysql_read,SqlBufRead)) { return(-1); }/* if (!(res_read = mysql_store_result(&mysql_read))) { printf("vsql_getpw: store result failed 4\n"); return(-4); } while((row = mysql_fetch_row(res_read))) { ret = 0; strncpy(domain, row[0], domain_size); } mysql_free_result(res_read); res_update = mysql_store_result(&mysql_read);*/ return(ret);}int vadd_ip_map( char *ip, char *domain) { if ( ip == NULL || strlen(ip) <= 0 ) return(-1); if ( domain == NULL || strlen(domain) <= 0 ) return(-1); if ( vauth_open_update() != 0 ) return(-1); qnprintf(SqlBufUpdate,SQL_BUF_SIZE, "update ip_alias_map set ip_addr='%s', domain='%s' ", ip, domain); EXEC SQL PREPARE S FROM :SqlBufUpdate; EXEC SQL EXECUTE S; EXEC SQL COMMIT; return(0);}int vdel_ip_map( char *ip, char *domain) { if ( ip == NULL || strlen(ip) <= 0 ) return(-1); if ( domain == NULL || strlen(domain) <= 0 ) return(-1); if ( vauth_open_update() != 0 ) return(-1); qnprintf( SqlBufUpdate,SQL_BUF_SIZE, "delete from ip_alias_map where ip_addr = '%s' and domain = '%s'", ip, domain); EXEC SQL PREPARE S FROM :SqlBufUpdate; EXEC SQL EXECUTE S; EXEC SQL COMMIT; return(0);}int vshow_ip_map( int first, char *ip, char *domain ){ static int more = 0; if ( ip == NULL ) return(-1); if ( domain == NULL ) return(-1); if ( vauth_open_update() != 0 ) return(-1); if ( first == 1 ) { snprintf(SqlBufRead,SQL_BUF_SIZE, "select ip_addr, domain from ip_alias_map"); /* if (res_read!=NULL) mysql_free_result(res_read); res_read = NULL; if (mysql_query(&mysql_read,SqlBufRead)) {!error!! } if (!(res_read = mysql_store_result(&mysql_read))) { printf("vsql_getpw: store result failed 5\n"); return(0); }*/ } else if ( more == 0 ) { return(0); }/* if ((row = mysql_fetch_row(res_read)) != NULL) { strncpy(ip, row[0], 18); strncpy(domain, row[1], 156); more = 1; return(1); } more = 0; mysql_free_result(res_read); res_read = NULL;*/ return(0);}#endifint vread_dir_control(vdir_type *vdir, char *domain, uid_t uid, gid_t gid){ int found = 0; int i; if ( vauth_open_update() != 0 ) return(-1); qnprintf(SqlBufRead, SQL_BUF_SIZE, "select %s from dir_control where domain = '%s'", DIR_CONTROL_SELECT, domain ); /*printf("read dir control: %s\n", SqlBufRead);*/ EXEC SQL PREPARE SE FROM :SqlBufRead; EXEC SQL DECLARE CE CURSOR FOR SE; EXEC SQL OPEN CE; found = 0; for(;;) { EXEC SQL FETCH CE INTO :cur_users, :level_cur, :level_max, :level_start0, :level_start1, :level_start2, :level_end0, :level_end1, :level_end2, :level_mod0, :level_mod1, :level_mod2, :level_index0, :level_index1, :level_index2, :the_dir; if (sqlca.sqlcode == 1403) break; found = 1; vdir->cur_users = cur_users; vdir->level_cur = level_cur; vdir->level_max = level_max; vdir->level_start[0] = level_start0; vdir->level_start[1] = level_start1; vdir->level_start[2] = level_start2; vdir->level_end[0] = level_end0; vdir->level_end[1] = level_end1; vdir->level_end[2] = level_end2; vdir->level_mod[0] = level_mod0; vdir->level_mod[1] = level_mod1; vdir->level_mod[2] = level_mod2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -