int tryLogin(int hSocket, _MODULE_DATA* _psSessionData, sLogin** psLogin, char* szLogin, char* szPassword) { int iRet; unsigned char* szTmp = NULL; unsigned char* szEncodedAuth = NULL; int nSendBufferSize = 0; struct afp_url tmpurl; /* Build AFP authentication request */ libafpclient_register(&afpclient); afp_main_quick_startup(NULL); init_uams(); afp_default_url(&tmpurl); memcpy(&tmpurl.servername, (*psLogin)->psServer->pHostIP, AFP_SERVER_NAME_LEN); memcpy(&tmpurl.username, szLogin, AFP_MAX_USERNAME_LEN); memcpy(&tmpurl.password, szPassword, AFP_MAX_PASSWORD_LEN); if ( server_subconnect(tmpurl) == SUCCESS ) { writeError(ERR_DEBUG_MODULE, "[%s] Login attempt successful.", MODULE_NAME); (*psLogin)->iResult = LOGIN_RESULT_SUCCESS; iRet = MSTATE_EXITING; } else { writeError(ERR_DEBUG_MODULE, "[%s] Login attempt failed.", MODULE_NAME); (*psLogin)->iResult = LOGIN_RESULT_FAIL; iRet = MSTATE_RUNNING; } setPassResult((*psLogin), szPassword); return(iRet); }
int start_afp(int s, char *ip, int port, unsigned char options, char *miscptr, FILE * fp) { char *empty = ""; char *login, *pass, mlogin[AFP_MAX_USERNAME_LEN], mpass[AFP_MAX_PASSWORD_LEN]; struct afp_url tmpurl; /* Build AFP authentication request */ libafpclient_register(&afpclient); afp_main_quick_startup(NULL); init_uams(); afp_default_url(&tmpurl); if (strlen(login = hydra_get_next_login()) == 0) login = empty; if (strlen(pass = hydra_get_next_password()) == 0) pass = empty; strncpy(tmpurl.servername, hydra_address2string(ip), AFP_SERVER_NAME_LEN - 1); tmpurl.servername[AFP_SERVER_NAME_LEN] = 0; strncpy(mlogin, login, AFP_MAX_USERNAME_LEN - 1); mlogin[AFP_MAX_USERNAME_LEN - 1] = 0; strncpy(mpass, pass, AFP_MAX_PASSWORD_LEN - 1); mpass[AFP_MAX_PASSWORD_LEN - 1] = 0; memcpy(&tmpurl.username, mlogin, AFP_MAX_USERNAME_LEN); memcpy(&tmpurl.password, mpass, AFP_MAX_PASSWORD_LEN); if (server_subconnect(tmpurl) == 0) { hydra_report_found_host(port, ip, "afp", fp); hydra_completed_pair_found(); if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0) return 3; return 2; } else { hydra_completed_pair(); if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0) return 2; } return 1; }
int main(int argc, char *argv[]) { int option_index=0; struct option long_options[] = { {"logmethod",1,0,'l'}, {"foreground",0,0,'f'}, {"debug",1,0,'d'}, {0,0,0,0}, }; int new_log_method=LOG_METHOD_SYSLOG; int dofork=1; /* getopt_long()'s return is int; specifying the variable to contain * this return value as char depends on endian-specific behavior, * breaking utterly on big endian (i.e., PowerPC) */ int c; int optnum; int command_fd=-1; daemon_register_afpclient(); if (init_uams()<0) return -1; while (1) { optnum++; c = getopt_long(argc,argv,"l:fdh", long_options,&option_index); if (c==-1) break; switch (c) { case 'l': if (strncmp(optarg,"stdout",6)==0) daemon_set_log_method(LOG_METHOD_STDOUT); else if (strncmp(optarg,"syslog",6)==0) daemon_set_log_method(LOG_METHOD_SYSLOG); else { printf("Unknown log method %s\n",optarg); usage(); } break; case 'f': dofork=0; break; case 'd': dofork=0; debug_mode=1; new_log_method=LOG_METHOD_STDOUT; break; case 'h': default: usage(); return -1; } } daemon_set_log_method(new_log_method); sprintf(commandfilename,"%s-%d",SERVER_FILENAME,(unsigned int) geteuid()); if (remove_other_daemon()<0) { log_for_client(NULL, AFPFSD,LOG_NOTICE, "Daemon is already running and alive\n"); return -1; } if ((!dofork) || (fork()==0)) { if ((command_fd=startup_listener())<0) goto error; log_for_client(NULL, AFPFSD,LOG_NOTICE, "Starting up AFPFS version %s\n",AFPFS_VERSION); afp_main_loop(command_fd); close_commands(command_fd); } return 0; error: printf("Could not start afpfsd\n"); return -1; }