BBOOL rtplatform_gfirst(PSMBDSTAT dirobj, char RTSMB_FAR * name_in) { char slashstar [] = {'\\', '*', '\0'}; char dotstar [] = {'.', '*', '\0'}; char name [SMBF_FILENAMESIZE + 1]; rtsmb_size len; int rv; void * rtp_dirobj; /* translate "*" to "*.*" becaues some file systems don't like "*" */ len = (rtsmb_size) tc_strlen (name_in); tc_strcpy (name, name_in); if (len > 1 && len < SMBF_FILENAMESIZE - 2 && tc_strcmp (&name[len - 2], slashstar) == 0) { tc_strcat (name, dotstar); } rv = rtp_file_gfirst(&rtp_dirobj, name); if (rv < 0) { dirobj->rtp_dirobj = (void*)0; return FALSE; } rtp_file_get_name(rtp_dirobj, dirobj->filename, SMBF_FILENAMESIZE); dirobj->filename[SMBF_FILENAMESIZE] = '\0'; /*translate rtplatform dstat to smb dstat */ rtplatform_translate_dstat (dirobj, rtp_dirobj); dirobj->unicode = 0; return TRUE; }
/*---------------------------------------------------------------------------*/ HTTPAuthenticationRealm* _HTTP_GetAuthenticationRealm ( HTTPAuthContext* ctx, const HTTP_CHAR* hostName, HTTP_UINT16 port, HTTP_CHAR* realmName ) { HTTPAuthenticationRealm* realm = 0; HTTPAuthenticationHost* host = _HTTP_GetAuthenticationHost(ctx, hostName, port); if (host) { realm = (HTTPAuthenticationRealm*) host->realmList.next; while (realm != (HTTPAuthenticationRealm*) &host->realmList) { if (!tc_strcmp(realm->realmName, realmName)) { break; } realm = (HTTPAuthenticationRealm*) realm->node.next; } if (realm == (HTTPAuthenticationRealm*) &host->realmList) { realm = 0; } } return (realm); }
RTSMB_STATIC int rtsmb_srv_browse_process_domain_announcement (PFVOID origin, PFVOID buf, rtsmb_size size, PRTSMB_HEADER pheader) { RTSMB_NBDS_HOST_ANNOUNCEMENT host; char group_name [RTSMB_NB_NAME_SIZE + 1]; rtsmb_char master_name_rt [RTSMB_NB_NAME_SIZE + 1]; host.comment = master_name_rt; host.comment_size = RTSMB_NB_NAME_SIZE; if (rtsmb_srv_browse_read_host_announcement (origin, buf, size, pheader, &host) < 0) { return -1; } rtsmb_util_rtsmb_to_ascii (host.server_name, group_name, CFG_RTSMB_USER_CODEPAGE); if (rtsmb_srv_browse_get_role () == RTSMB_SRV_BROWSE_ROLE_MASTER_BROWSER) { RTSMB_BROWSE_SERVER_INFO info; /* if this group is our group, someone is encroaching on our responsibilities. force election to see who is really master */ if (tc_strcmp (group_name, rtsmb_srv_nbns_get_our_group ()) == 0) { rtsmb_srv_browse_force_election (); return 0; } /* search through our list and update entry */ rtsmb_util_rtsmb_to_ascii (host.server_name, info.name, CFG_RTSMB_USER_CODEPAGE); info.type = host.type; info.version_minor = host.version_minor; info.version_major = host.version_major; info.browse_version_minor = host.browse_version_major; info.browse_version_major = host.browse_version_major; info.signature = host.signature; info.update_count = host.update_count; info.periodicity = host.periodicity; rtsmb_util_rtsmb_to_ascii (host.comment, info.comment, CFG_RTSMB_USER_CODEPAGE); info.time_received = rtp_get_system_msec(); rtsmb_srv_browse_update_entry (prtsmb_srv_ctx->domain_table, (rtsmb_size )prtsmb_srv_ctx->domain_table_size, &info); } return 0; }
BBOOL Auth_DoPasswordsMatch (PSMB_SESSIONCTX pCtx, PFRTCHAR name, PFRTCHAR domainname, PFCHAR plaintext, PFBYTE ansi_password, PFBYTE uni_password) /*_YI_ */ { BBOOL ret_val; #if (INCLUDE_RTSMB_ENCRYPTION) byte passbuf [24]; #endif if(plaintext) /* if there is no need to check passwords, don't */ { ret_val = FALSE; #if (INCLUDE_RTSMB_ENCRYPTION) if (pCtx->dialect >= NT_LM) { int i; rtp_printf("Auth_DoPasswordsMatch: ansi_password = %s\n", plaintext); for (i=0; i<24; i++) rtp_printf("%x ", ansi_password[i]); } if (pCtx->dialect >= NT_LM && tc_memcmp (cli_util_encrypt_password_nt (plaintext, pCtx->encryptionKey, passbuf), ansi_password, 24)==0) { ret_val = TRUE; } else if (tc_memcmp (cli_util_encrypt_password_pre_nt (plaintext, pCtx->encryptionKey, passbuf), ansi_password, 24)==0) { ret_val = TRUE; } else if (name && domainname && uni_password && (tc_memcmp(cli_util_encrypt_password_lmv2 (plaintext, pCtx->encryptionKey, (PFCHAR)passbuf,uni_password, name, domainname), ansi_password, 24)==0)) { ret_val = TRUE; } #else if (tc_strcmp (plaintext, ansi_password) == 0) { ret_val = TRUE; } #endif } else ret_val = TRUE; return (ret_val); }
RTSMB_STATIC BBOOL rtsmb_srv_browse_have_won_election (PRTSMB_NBDS_REQUEST_ELECTION pinfo) { char server_name_ascii [17]; /* This function follows draft-leach-cifs-browser-spec-00.txt rules for winning an election. */ if (rtsmb_srv_browse_election_win_count < 0) /* if we lost in this election already */ { return FALSE; } if (pinfo->version < RTSMB_NBDS_ELECTION_VERSION) { return TRUE; } if (pinfo->criteria < rtsmb_srv_browse_get_election_criteria ()) { return TRUE; } #if (0) if (pinfo->up_time < 0) /* FIXME: need some way to tell our uptime? */ { return TRUE; } #endif rtsmb_util_rtsmb_to_ascii (pinfo->server_name, server_name_ascii, CFG_RTSMB_USER_CODEPAGE); if (tc_strcmp (server_name_ascii, rtsmb_srv_nbns_get_our_name ()) > 0) { return TRUE; } return FALSE; }
RTSMB_STATIC int rtsmb_srv_browse_process_host_announcement (PFVOID origin, PFVOID buf, rtsmb_size size, PRTSMB_HEADER pheader) { RTSMB_NBDS_HOST_ANNOUNCEMENT host; RTSMB_BROWSE_SERVER_INFO info; rtsmb_char comment_rt [RTSMB_MAX_COMMENT_SIZE + 1]; host.comment = comment_rt; host.comment_size = RTSMB_MAX_COMMENT_SIZE; if (rtsmb_srv_browse_read_host_announcement (origin, buf, size, pheader, &host) < 0) { return -1; } if (host.opcode == RTSMB_NBDS_COM_LOCAL_MASTER_ANNOUNCEMENT) { /* cache this name of our local master browser */ rtsmb_util_rtsmb_to_ascii (host.server_name, prtsmb_srv_ctx->local_master, CFG_RTSMB_USER_CODEPAGE); } else if (host.opcode == RTSMB_NBDS_COM_HOST_ANNOUNCEMENT) { if (host.type == 0) { char server_name [RTSMB_NB_NAME_SIZE + 1]; rtsmb_util_rtsmb_to_ascii (host.server_name, server_name, CFG_RTSMB_USER_CODEPAGE); /* if the local master is shutting down, we need to force an election */ if (tc_strcmp (server_name, prtsmb_srv_ctx->local_master) == 0) { rtsmb_srv_browse_force_election (); } } } if (rtsmb_srv_browse_get_role () == RTSMB_SRV_BROWSE_ROLE_MASTER_BROWSER) { /* if the type indicates a master browser, someone is encroaching on our responsibilities. Force election to see who is really master */ if (ON (host.type, SV_TYPE_MASTER_BROWSER)) { rtsmb_srv_browse_force_election (); return 0; } /* search through our list and update entry */ rtsmb_util_rtsmb_to_ascii (host.server_name, info.name, CFG_RTSMB_USER_CODEPAGE); info.type = host.type; info.version_minor = host.version_minor; info.version_major = host.version_major; info.browse_version_minor = host.browse_version_major; info.browse_version_major = host.browse_version_major; info.signature = host.signature; info.update_count = host.update_count; info.periodicity = host.periodicity; rtsmb_util_rtsmb_to_ascii (host.comment, info.comment, CFG_RTSMB_USER_CODEPAGE); info.time_received = rtp_get_system_msec(); rtsmb_srv_browse_update_entry (prtsmb_srv_ctx->server_table, (rtsmb_size )prtsmb_srv_ctx->server_table_size, &info); /* check if we have enough backup browsers */ rtsmb_srv_browse_ensure_backup_ratio (); } return 0; }
/* ********************************************************************* */ int vt100c_update(char c) { int n; PFCHAR pfc; int retval=0; int width; int x; int tabcol; int cur_x,cur_y; vt100c_init(); vt100c_updatemode(c); /* process character based on existing mode */ if(vt100c_ctx->mode==VT100C_NORMAL) { /* tbd: don't hardcode pcvid */ /* pcvid_set_cur_context(&(vt100c_ctx->scrolling_term)); */ if(c!='\t') { pcvid_putc(c); } else { width=pcvid_get_width(); x=pcvid_wherex(); for(n=x;n<width;n++) { if(vt100c_ctx->tab_table[n]) { tabcol=n+1; for(n=x;n<tabcol;n++) pcvid_putc(' '); n=0; break; } } /* If no tab found in table, let _putc() do the tab */ if(n) pcvid_putc('\t'); } } if(vt100c_ctx->mode==VT100C_NORMAL) { return(0); } if(vt100c_ctx->mode==VT100C_LEFTPARENCMD) { #if (REALLY_SLOW) if(c=='A') retval=VT100C_UNSUPPORTEDPARAM; /* United Kingdom (UK) charset on */ else if(c=='B'); /* United States (USASCII) charset on */ else if(c=='0') retval=VT100C_UNSUPPORTEDPARAM; /* Special graphic/line drawing charset on */ else if(c=='1') retval=VT100C_UNSUPPORTEDPARAM; /* Alternative character ROM on */ else if(c=='2') retval=VT100C_UNSUPPORTEDPARAM; /* Alternative graphic ROM on */ else retval=VT100C_BADPARAM; #else retval=VT100C_UNSUPPORTEDPARAM; #endif } if(vt100c_ctx->mode==VT100C_RIGHTPARENCMD) { #if (REALLY_SLOW) if(c=='A') retval=VT100C_UNSUPPORTEDPARAM; /* United Kingdom (UK) charset off */ else if(c=='B'); /* United States (USASCII) charset off */ else if(c=='0') retval=VT100C_UNSUPPORTEDPARAM; /* Special graphic/line drawing charset off */ else if(c=='1') retval=VT100C_UNSUPPORTEDPARAM; /* Alternative character ROM off */ else if(c=='2') retval=VT100C_UNSUPPORTEDPARAM; /* Alternative graphic ROM off */ else retval=VT100C_BADPARAM; #else retval=VT100C_UNSUPPORTEDPARAM; #endif } if(vt100c_ctx->mode==VT100C_PLAINCMD) { if(c=='D') { /* Index */ /* pcvid_set_cur_context(&(vt100c_ctx->scrolling_term)); */ if(pcvid_wherex()==1 && pcvid_wherey()==pcvid_get_height()) { pcvid_scroll_up(); } else { DEBUG_ERROR("Bad Index",NOVAR,0,0); } } if(c=='M') { /* Reverse Index */ pcvid_set_cur_context(&(vt100c_ctx->scrolling_term)); if(pcvid_wherex()==1 && pcvid_wherey()==1) { pcvid_scroll_down(); } else { DEBUG_ERROR("Bad Reverse Index",NOVAR,0,0); } } if(c=='7') { /* Save cursor and attributes */ vt100_savecurpos(); vt100_savecurattrib(); } if(c=='8') { /* Restore cursor and attributes */ vt100_restorecurpos(); vt100_restorecurattrib(); } if(c=='H') { /* set tab at current column */ vt100c_ctx->tab_table[pcvid_wherex()-1]=1; } if(c=='c') { /* Power-up reset */ retval=VT100C_UNSUPPORTEDESC; } } if(vt100c_ctx->mode==VT100C_POUNDCMD) { if(c=='3') { /* Change this line to double-height top half */ return(VT100C_UNSUPPORTEDESC); } if(c=='4') { /* Change this line to double-height bottom half */ return(VT100C_UNSUPPORTEDESC); } if(c=='5') { /* Change this line to single-width single-height */ return(VT100C_UNSUPPORTEDESC); } if(c=='6') { /* Change this line to double-width single height */ return(VT100C_UNSUPPORTEDESC); } if(c=='8') { /* fill screen with E */ retval=VT100C_UNSUPPORTEDESC; } } if(vt100c_ctx->mode==VT100C_BRAKCMD||vt100c_ctx->mode==VT100C_KCMD) { if(vt100c_ctx->icmdbuf<VT100C_CMDBUFSIZ-1) vt100c_ctx->cmdbuf[vt100c_ctx->icmdbuf++]=c; } if(vt100c_ctx->mode==VT100C_QUESBRAKCMD) { vt100c_ctx->cmdbuf[0]=c; } /* is this the right code ?? */ if(vt100c_ctx->mode==VT100C_KCMDEND) { vt100c_ctx->cmdbuf[vt100c_ctx->icmdbuf]='\0'; retval=vt100c_set_scroll_win(); vt100c_ctx->icmdbuf=0; } if(vt100c_ctx->mode==VT100C_BRAKCMDEND) { vt100c_ctx->cmdbuf[vt100c_ctx->icmdbuf]='\0'; if(c=='y') { if((pfc=tc_strchr(vt100c_ctx->cmdbuf,';'))!=0) { n=tc_atoi(pfc+1); if(n>0&&n<16) { retval=VT100C_UNSUPPORTEDESC; } else { retval=VT100C_INVALIDESC; } } else { retval=VT100C_INVALIDESC; } } if(c=='m'||c=='q') { if(vt100c_ctx->icmdbuf) { pfc=vt100c_ctx->cmdbuf; while((n=vt100c_get_next_param(&pfc))!=-1) { if(c=='m') { if(n==0) { /* all attributes off */ vt100c_allattribsoff(); } else if(n==1) { /* bold on */ pcvid_set_forecolor(15); } else if(n==4) { /* underscore on */ retval=VT100C_UNSUPPORTEDPARAM; } else if(n==5) { /* blink on */ pcvid_set_blink(TRUE); } else if(n==7) { /* inverse on */ pcvid_set_inverse(TRUE); } else { /* bad parameter */ retval=VT100C_BADPARAM; } } if(c=='q') { if(n==0) retval=VT100C_UNSUPPORTEDPARAM; /* all LEDs off */ else if(n==1) retval=VT100C_UNSUPPORTEDPARAM; /* LED 1 on */ else if(n==2) retval=VT100C_UNSUPPORTEDPARAM; /* LED 2 on */ else if(n==3) retval=VT100C_UNSUPPORTEDPARAM; /* LED 3 on */ else if(n==4) retval=VT100C_UNSUPPORTEDPARAM; /* LED 4 on */ else retval=VT100C_BADPARAM; } } } else { if(c=='m') { vt100c_allattribsoff(); } if(c=='q') { retval=VT100C_UNSUPPORTEDPARAM; /* all LEDs off */ } } } if(c=='H'||c=='f') { /* gotoxy */ pcvid_set_cur_context(&(vt100c_ctx->scrolling_term)); if((pfc=tc_strchr(vt100c_ctx->cmdbuf,';'))!=0) { *pfc='\0'; cur_x=tc_atoi(pfc+1); cur_y=tc_atoi(vt100c_ctx->cmdbuf); if(cur_x<1) cur_x=1; if(cur_x>pcvid_get_width()) cur_x=pcvid_get_width(); if(cur_y<1) cur_y=1; if(cur_y>pcvid_get_height()) cur_y=pcvid_get_height(); if(vt100c_ctx->scroll_in_region) pcvid_gotoxy(cur_x,cur_y); else pcvid_gotoxy(1+cur_x-vt100c_ctx->scrolling_term.x1, 1+cur_y-vt100c_ctx->scrolling_term.y1); } else { pcvid_gotoxy(1,1); } } if(c=='g') { if(!tc_strcmp(vt100c_ctx->cmdbuf,"")||!tc_strcmp(vt100c_ctx->cmdbuf,"0")) { /* clear tab at current column */ vt100c_ctx->tab_table[pcvid_wherex()-1]=0; } else if(!tc_strcmp(vt100c_ctx->cmdbuf,"3")) { /* clear all tabs */ for(n=0;n<PCVID_SCREEN_COLS;n++) vt100c_ctx->tab_table[n]=0; } else { retval=VT100C_INVALIDESC; } } if(c=='n') { if(!tc_strcmp(vt100c_ctx->cmdbuf,"6")) { /* Cursor position report */ vt100c_curposreport(); } else if(!tc_strcmp(vt100c_ctx->cmdbuf,"5")) { /* Status report */ vt100c_sends("\x27 [ c"); } else { retval=VT100C_INVALIDESC; } } if(c=='c') { if(!tc_strcmp(vt100c_ctx->cmdbuf,"")||!tc_strcmp(vt100c_ctx->cmdbuf,"0")) { /* What are you? */ vt100c_sends("\x27 [?1;0 c"); /* base VT100, no options */ } else { retval=VT100C_INVALIDESC; } } if(c=='A'||c=='B'||c=='C'||c=='D') { vt100c_ctx->cmdbuf[vt100c_ctx->icmdbuf]='\0'; n=tc_atoi(vt100c_ctx->cmdbuf); if(!n) n=1; pcvid_set_cur_context(&(vt100c_ctx->scrolling_term)); if(c=='A') pcvid_gotoxy(pcvid_wherex(),pcvid_wherey()-n); /* cursor up */ if(c=='B') pcvid_gotoxy(pcvid_wherex(),pcvid_wherey()+n); /* cursor down */ if(c=='C') pcvid_gotoxy(pcvid_wherex()+n,pcvid_wherey()); /* cursor right */ if(c=='D') pcvid_gotoxy(pcvid_wherex()-n,pcvid_wherey()); /* cursor left */ } if(c=='J') { if(!tc_strcmp(vt100c_ctx->cmdbuf,"")||!tc_strcmp(vt100c_ctx->cmdbuf,"0")) { /* erase from cursor to end of screen */ vt100_erase_cur_to_ends(); } else if(!tc_strcmp(vt100c_ctx->cmdbuf,"2")) { /* clear screen */ pcvid_cls(); } else { retval=VT100C_INVALIDESC; } } if(c=='K') { if(!tc_strcmp(vt100c_ctx->cmdbuf,"")||!tc_strcmp(vt100c_ctx->cmdbuf,"0")) { /* erase from cursor to end of line */ vt100_erase_cur_to_endl(); } else if(!tc_strcmp(vt100c_ctx->cmdbuf,"1")) { /* erase from beginning of line to cursor */ vt100_erase_line_to_cur(); } else if(!tc_strcmp(vt100c_ctx->cmdbuf,"2")) { /* erase line containing cursor */ vt100_erase_cur_line(); } else { retval=VT100C_INVALIDESC; } } if(c=='r') { retval=vt100c_set_scroll_win(); } vt100c_ctx->icmdbuf=0; } if(vt100c_ctx->mode==VT100C_BRAKCMDSET||vt100c_ctx->mode==VT100C_BRAKCMDRESET) { vt100c_ctx->cmdbuf[vt100c_ctx->icmdbuf]='\0'; vt100c_ctx->icmdbuf=0; if(!tc_strcmp(vt100c_ctx->cmdbuf,"20")) { if(vt100c_ctx->mode==VT100C_BRAKCMDSET) retval=VT100C_UNSUPPORTEDESC; /* Set Mode: Line feed/new */ else retval=VT100C_UNSUPPORTEDESC; /* Reset Mode: Line feed/new */ } else { retval=VT100C_INVALIDESC; } } if(vt100c_ctx->mode==VT100C_QUESBRAKSET) { if(vt100c_ctx->cmdbuf[0]=='1') /* Set Mode: Application keypad */ { vt100c_ctx->application_keypad=1; } else if(vt100c_ctx->cmdbuf[0]=='3') {retval=VT100C_UNSUPPORTEDESC;} /* Set Mode: Column Mode */ else if(vt100c_ctx->cmdbuf[0]=='4') {retval=VT100C_UNSUPPORTEDESC;} /* Set Mode: Scrolling */ else if(vt100c_ctx->cmdbuf[0]=='5') {retval=VT100C_UNSUPPORTEDESC;} /* Set Mode: Screen Mode */ else if(vt100c_ctx->cmdbuf[0]=='6') { vt100c_ctx->scroll_in_region=1; /* Set Mode: Origin Mode */ } else if(vt100c_ctx->cmdbuf[0]=='7') {retval=VT100C_UNSUPPORTEDESC;} /* Set Mode: Wraparound */ else if(vt100c_ctx->cmdbuf[0]=='8') {retval=VT100C_UNSUPPORTEDESC;} /* Set Mode: Autorepeat */ else if(vt100c_ctx->cmdbuf[0]=='9') {retval=VT100C_UNSUPPORTEDESC;} /* Set Mode: Interface */ else {retval=VT100C_INVALIDESC;} } if(vt100c_ctx->mode==VT100C_QUESBRAKRESET) { if(vt100c_ctx->cmdbuf[0]=='1') /* Reset Mode: Application keypad */ { vt100c_ctx->application_keypad=0; } else if(vt100c_ctx->cmdbuf[0]=='2') {retval=VT100C_UNSUPPORTEDESC;} /* Reset Mode: ANSI/VT52 */ else if(vt100c_ctx->cmdbuf[0]=='3') {retval=VT100C_UNSUPPORTEDESC;} /* Reset Mode: Column Mode */ else if(vt100c_ctx->cmdbuf[0]=='4') {retval=VT100C_UNSUPPORTEDESC;} /* Reset Mode: Scrolling */ else if(vt100c_ctx->cmdbuf[0]=='5') {retval=VT100C_UNSUPPORTEDESC;} /* Reset Mode: Screen Mode */ else if(vt100c_ctx->cmdbuf[0]=='6') {vt100c_ctx->scroll_in_region=0;} /* Reset Mode: Origin Mode */ else if(vt100c_ctx->cmdbuf[0]=='7') {retval=VT100C_UNSUPPORTEDESC;} /* Reset Mode: Wraparound */ else if(vt100c_ctx->cmdbuf[0]=='8') {retval=VT100C_UNSUPPORTEDESC;} /* Reset Mode: Autorepeat */ else if(vt100c_ctx->cmdbuf[0]=='9') {retval=VT100C_UNSUPPORTEDESC;} /* Reset Mode: Interface */ else {retval=VT100C_INVALIDESC;} } return(retval); }