📄 voracle.pc
字号:
vdir->level_index[0] = level_index0; vdir->level_index[1] = level_index1; vdir->level_index[2] = level_index2; fix_name(the_dir); strncpy(vdir->the_dir, the_dir, MAX_DIR_NAME); } EXEC SQL CLOSE CE; EXEC SQL COMMIT; if ( found == 0 ) { vcreate_dir_control(domain); vdir->cur_users = 0; for(i=0;i<MAX_DIR_LEVELS;++i){ vdir->level_start[i] = 0; vdir->level_end[i] = MAX_DIR_LIST-1; vdir->level_index[i] = 0; } vdir->level_mod[0] = 0; vdir->level_mod[1] = 2; vdir->level_mod[2] = 4; vdir->level_cur = 0; vdir->level_max = MAX_DIR_LEVELS; vdir->the_dir[0] = 0; } return(0);}int vwrite_dir_control(vdir_type *vdir, char *domain, uid_t uid, gid_t gid){ if ( vauth_open_update() != 0 ) return(-1); sprintf(SqlBufUpdate, "update dir_control \set cur_users = %ld, \level_cur = %d , level_max = %d , \level_start0 = %d , level_start1 = %d , level_start2 = %d , \level_end0 = %d , level_end1 = %d , level_end2 = %d , \level_mod0 = %d , level_mod1 = %d , level_mod2 = %d , \level_index0 = %d , level_index1 = %d , level_index2 = %d , \the_dir = '%s' where domain = '%s'\n", vdir->cur_users, vdir->level_cur, vdir->level_max, vdir->level_start[0], vdir->level_start[1], vdir->level_start[2], vdir->level_end[0], vdir->level_end[1], vdir->level_end[2], vdir->level_mod[0], vdir->level_mod[1], vdir->level_mod[2], vdir->level_index[0], vdir->level_index[1], vdir->level_index[2], vdir->the_dir, domain);/*printf("write dir control: %s\n", SqlBufUpdate);*/ EXEC SQL PREPARE S FROM :SqlBufUpdate; EXEC SQL EXECUTE S; EXEC SQL COMMIT; return(0);}void vcreate_dir_control(char *domain){ if ( vauth_open_update() != 0 ) return; snprintf(SqlBufCreate, SQL_BUF_SIZE, "create table dir_control ( %s )", DIR_CONTROL_TABLE_LAYOUT); EXEC SQL PREPARE S FROM :SqlBufCreate; EXEC SQL EXECUTE S; EXEC SQL COMMIT; qnprintf(SqlBufUpdate, SQL_BUF_SIZE, "insert into dir_control ( \domain, 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 ) values ( \'%s', 0, \0, %d, \0, 0, 0, \%d, %d, %d, \0, 2, 4, \0, 0, 0, \'')\n", domain, MAX_DIR_LEVELS, MAX_DIR_LIST-1, MAX_DIR_LIST-1, MAX_DIR_LIST-1); EXEC SQL PREPARE S FROM :SqlBufUpdate; EXEC SQL EXECUTE S; EXEC SQL COMMIT;}int vdel_dir_control(char *domain){ int err; if ( (err=vauth_open_update()) != 0 ) return(err); qnprintf(SqlBufUpdate, SQL_BUF_SIZE, "delete from dir_control where domain = '%s'", domain); EXEC SQL PREPARE S FROM :SqlBufUpdate; EXEC SQL EXECUTE S; EXEC SQL COMMIT; return(0);}#ifdef ENABLE_AUTH_LOGGINGint vset_lastauth(char *user, char *domain, char *remoteip ){ int err; if ( (err=vauth_open_update()) != 0 ) return(err); qnprintf( SqlBufUpdate, SQL_BUF_SIZE,"update lastauth set pw_user='%s', pw_domain='%s', \remote_ip='%s', timestamp=%lu", user, domain, remoteip, time(NULL)); fprintf(stderr, "auth log: %s\n", SqlBufUpdate); EXEC SQL PREPARE S FROM :SqlBufUpdate; EXEC SQL EXECUTE S; EXEC SQL COMMIT; return(0);}time_t vget_lastauth(struct vqpasswd *pw, char *domain){ int err; time_t mytime; if ( (err=vauth_open_update()) != 0 ) return(err); qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "select timestamp from lastauth where pw_user='%s' and pw_domain='%s'", pw->pw_name, domain); EXEC SQL PREPARE SD FROM :SqlBufUpdate; EXEC SQL DECLARE CD CURSOR FOR SD; EXEC SQL OPEN CD; Vauthtime = 0; EXEC SQL FETCH CD INTO :Vauthtime; EXEC SQL CLOSE CD; EXEC SQL COMMIT; mytime = Vauthtime; return(mytime);}char *vget_lastauthip(struct vqpasswd *pw, char *domain){int err; if ( (err=vauth_open_update()) != 0 ) return(""); memset(Vip_addr,0,sizeof(Vip_addr)); sprintf( SqlBufUpdate, "select remote_ip from lastauth where pw_user='%s' and pw_domain='%s'", pw->pw_name, domain); EXEC SQL PREPARE SX FROM :SqlBufUpdate; EXEC SQL DECLARE CX CURSOR FOR SX; EXEC SQL OPEN CX; EXEC SQL FETCH CX INTO :Vip_addr; EXEC SQL CLOSE CX; EXEC SQL COMMIT; fix_name(Vip_addr); return(Vip_addr);}void vcreate_lastauth_table(){ if ( vauth_open_update() != 0 ) return; snprintf( SqlBufCreate, SQL_BUF_SIZE, "create table lastauth ( %s )", LASTAUTH_TABLE_LAYOUT); EXEC SQL PREPARE S FROM :SqlBufCreate; EXEC SQL EXECUTE S; EXEC SQL COMMIT; return;}#endif /* ENABLE_AUTH_LOGGING */#ifdef VALIASchar *valias_select( char *alias, char *domain ){ int err; /* if we can not connect, set the verrori value */ if ( (err=vauth_open_update()) != 0 ) { return(NULL); } qnprintf( SqlBufRead, SQL_BUF_SIZE, "select valias_line from valias \where alias = '%s' and domain = '%s'", alias, domain ); EXEC SQL PREPARE SC FROM :SqlBufRead; EXEC SQL DECLARE CC CURSOR FOR SC; EXEC SQL OPEN CC; return(valias_select_next());}char *valias_select_next(){ for(;;) { EXEC SQL FETCH CC INTO :Vpw_alias_line; if (sqlca.sqlcode != 0) break; Vpw_alias_line.arr[Vpw_alias_line.len] = '\0'; return(Vpw_alias_line.arr); } EXEC SQL CLOSE CC; EXEC SQL COMMIT; return(NULL);}int valias_insert( char *alias, char *domain, char *alias_line){ int err; if ( (err=vauth_open_update()) != 0 ) return(err); while(*alias_line==' ' && *alias_line!=0) ++alias_line; qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "insert into valias \( alias, domain, valias_line ) values ( '%s', '%s', '%s')", alias, domain, alias_line ); EXEC SQL PREPARE S FROM :SqlBufUpdate; EXEC SQL EXECUTE S; EXEC SQL COMMIT; return(0);}int valias_remove( char *alias, char *domain, char *alias_line){ int err; if ( (err=vauth_open_update()) != 0 ) return(err); qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "delete from valias where alias = '%s' \and valias_line = '%s' and domain = '%s'", alias, alias_line, domain ); EXEC SQL PREPARE S FROM :SqlBufUpdate; EXEC SQL EXECUTE S; EXEC SQL COMMIT; return(0);}int valias_delete( char *alias, char *domain){ int err; if ( (err=vauth_open_update()) != 0 ) return(err); qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "delete from valias where alias = '%s' \and domain = '%s'", alias, domain ); EXEC SQL PREPARE S FROM :SqlBufUpdate; EXEC SQL EXECUTE S; EXEC SQL COMMIT; return(0);}int valias_delete_domain( char *domain){ int err; if ( (err=vauth_open_update()) != 0 ) return(err); qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "delete from valias where domain = '%s'", domain ); EXEC SQL PREPARE S FROM :SqlBufUpdate; EXEC SQL EXECUTE S; EXEC SQL COMMIT; return(0);}void vcreate_valias_table(){ if ( vauth_open_update() != 0 ) return; snprintf( SqlBufCreate, SQL_BUF_SIZE, "create table valias ( %s )", VALIAS_TABLE_LAYOUT ); EXEC SQL PREPARE S FROM :SqlBufCreate; EXEC SQL EXECUTE S; EXEC SQL COMMIT; return;}char *valias_select_all( char *alias, char *domain ){ int err; if ( (err=vauth_open_update()) != 0 ) return(NULL); sprintf( SqlBufUpdate, "select alias, valias_line from valias where domain = '%s' order by alias", domain ); EXEC SQL PREPARE SB FROM :SqlBufUpdate; EXEC SQL DECLARE CB CURSOR FOR SB; EXEC SQL OPEN CB; return(valias_select_all_next(alias));}char *valias_select_all_next(char *alias){ for(;;) { EXEC SQL FETCH CB INTO :Vpw_alias, :Vpw_alias_line; if (sqlca.sqlcode == 1403) break; if (sqlca.sqlcode != 0 ) { EXEC SQL CLOSE CB; EXEC SQL COMMIT; vcreate_valias_table(); return(NULL); } Vpw_alias_line.arr[Vpw_alias_line.len] = '\0'; fix_name(Vpw_alias); strcpy(alias, Vpw_alias); return(Vpw_alias_line.arr); } EXEC SQL CLOSE CB; EXEC SQL COMMIT; return(NULL);}#endif#ifdef ENABLE_ORACLE_LOGGINGint logmysql(int verror, char *TheUser, char *TheDomain, char *ThePass, char *TheName, char *IpAddr, char *LogLine) { int err; time_t mytime; mytime = time(NULL); if ( (err=vauth_open_update()) != 0 ) return(err); qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "INSERT INTO vlog set user='%s', passwd='%s', \ domain='%s', logon='%s', remoteip='%s', message='%s', \ error=%i, timestamp=%d", TheUser, ThePass, TheDomain, TheName, IpAddr, LogLine, verror, (int)mytime); EXEC SQL PREPARE S FROM :SqlBufUpdate; EXEC SQL EXECUTE S; EXEC SQL COMMIT; return(0);}void vcreate_vlog_table(){ if ( vauth_open_update() != 0 ) return; snprintf( SqlBufCreate, SQL_BUF_SIZE, "CREATE TABLE vlog ( %s )", VLOG_TABLE_LAYOUT); EXEC SQL PREPARE S FROM :SqlBufCreate; EXEC SQL EXECUTE S; EXEC SQL COMMIT; return;}#endif#ifdef ENABLE_ORACLE_LIMITSvoid vcreate_limits_table(){ if ( vauth_open_update() != 0 ) return; snprintf( SqlBufCreate, SQL_BUF_SIZE, "CREATE TABLE limits ( %s )", LIMITS_TABLE_LAYOUT); EXEC SQL PREPARE S FROM :SqlBufCreate; EXEC SQL EXECUTE S; EXEC SQL COMMIT;}int vget_limits( char *domain, struct vlimits *limits ){ int err; /* if we can not connect, set the verrori value */ if ( (err=vauth_open_update()) != 0 ) { return(-1); } qnprintf( SqlBufRead, SQL_BUF_SIZE, "SELECT maxpopaccounts, maxaliases, " "maxforwards, maxautoresponders, maxmailinglists, diskquota, " "defaultquota, disablepop, disableimap, disabledialup, " "disablepasswordchanging, disablewebmail, disablerelay \n" "FROM limits \n" "WHERE domain = '%s'", domain);/* if (mysql_query(&mysql_read,SqlBufRead)) { vcreate_limits_table(); if (mysql_query(&mysql_read,SqlBufRead)) { fprintf(stderr, "vmysql: sql error[j]: %s\n", mysql_error(&mysql_read)); return(-1); } } if (!(res_read = mysql_store_result(&mysql_read))) { fprintf(stderr, "vmysql: store result failed\n"); return -1; } if (mysql_num_rows(res_read) == 0) { fprintf(stderr, "vnysql: can't find limits for domain '%s'\n", domain); return -1; } if ((row = mysql_fetch_row(res_read)) != NULL) { limits->maxpopaccounts = atoi(row[0]); limits->maxaliases = atoi(row[1]); limits->maxforwards = atoi(row[2]); limits->maxautoresponders = atoi(row[3]); limits->maxmailinglists = atoi(row[4]); limits->diskquota = atoi(row[5]); limits->defaultquota = atoi(row[6]); limits->disablepop = atoi(row[7]); limits->disableimap = atoi(row[8]); limits->disabledialup = atoi(row[9]); limits->disablepasswordchanging = atoi(row[10]); limits->disablewebmail = atoi(row[11]); limits->disablerelay = atoi(row[12]); } mysql_free_result(res_read);*/ return 0;}int vdel_limits( char *domain ){ qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "DELETE FROM limits WHERE domain = '%s'", domain); EXEC SQL PREPARE S FROM :SqlBufUpdate; EXEC SQL EXECUTE S; EXEC SQL COMMIT; return 0;}int vset_limits( char *domain, struct vlimits *limits ){ int err; /* if we can not connect, set the verrori value */ if ( (err=vauth_open_update()) != 0 ) { return(-1); } qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "REPLACE INTO limits ( " "domain, maxpopaccounts, maxaliases, " "maxforwards, maxautoresponders, maxmailinglists, diskquota, " "defaultquota, disablepop, disableimap, disabledialup, " "disablepasswordchanging, disablewebmail, disablerelay ) \n" "VALUES \n" "('%s', %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)", domain, limits->maxpopaccounts, limits->maxaliases, limits->maxforwards, limits->maxautoresponders, limits->maxmailinglists, limits->diskquota, limits->defaultquota, limits->disablepop, limits->disableimap, limits->disabledialup, limits->disablepasswordchanging, limits->disablewebmail, limits->disablerelay); EXEC SQL PREPARE S FROM :SqlBufUpdate; EXEC SQL EXECUTE S; EXEC SQL COMMIT; return 0;}#endifvoid fix_name(char *name){ int i; for(i=0;name[i]!=0;++i) { if ( name[i] == ' ' ) { name[i] = 0; } }}int vauth_crypt(char *user,char *domain,char *clear_pass,struct vqpasswd *vpw){ if ( vpw == NULL ) return(-1); return(strcmp(crypt(clear_pass,vpw->pw_passwd),vpw->pw_passwd));}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -