Changeset 117
- Timestamp:
- Feb 2, 2008, 7:32:39 AM (18 years ago)
- Location:
- trunk/samba/source/ndpsmb
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/samba/source/ndpsmb/ndpsmb.c
r70 r117 150 150 {ND_PROP_STRING, 0, "USER", "guest"}, 151 151 {ND_PROP_STRING, 0, "PASSWORD", ""}, 152 {ND_PROP_STRING, 0, "SPASSWORD", ""}, 152 153 {ND_PROP_STRING, 0, "MASTER", "WORKGROUP"}, 153 154 { ND_PROP_ULONG, 0, "MASTERTYPE", "1"}, … … 376 377 } 377 378 379 static unsigned char fromhex (char c) 380 { 381 if ('0' <= c && c <= '9') 382 { 383 return c - '0'; 384 } 385 386 if ('A' <= c && c <= 'F') 387 { 388 return c - 'A'; 389 } 390 391 if ('a' <= c && c <= 'f') 392 { 393 return c - 'a'; 394 } 395 396 return 0; 397 } 398 399 static char tohex (unsigned char b) 400 { 401 b &= 0xF; 402 403 if (b <= 9) 404 { 405 return b + '0'; 406 } 407 408 return 'A' + (b - 0xA); 409 } 410 411 static void decryptPassword (const char *pszCrypt, char *pszPlain) 412 { 413 /* A simple "decryption", character from the hex value. */ 414 const char *s = pszCrypt; 415 char *d = pszPlain; 416 417 while (*s) 418 { 419 *d++ = (char)((fromhex (*s++) << 4) + fromhex (*s++)); 420 } 421 422 *d++ = 0; 423 } 424 425 static void encryptPassword (const char *pszPlain, char *pszCrypt) 426 { 427 /* A simple "encryption" encode each character as hex value. */ 428 const char *s = pszPlain; 429 char *d = pszCrypt; 430 431 while (*s) 432 { 433 *d++ = tohex ((*s) >> 4); 434 *d++ = tohex (*s); 435 s++; 436 } 437 438 *d++ = 0; 439 } 378 440 379 441 /* accept parameters in form … … 386 448 const unsigned char * q = NULL; 387 449 HPIPE pipe; 450 int defaultPassword = 1; 388 451 389 452 pRes->memlen = 1 << 18; … … 429 492 { 430 493 StrNCpy(pRes->srv.password, q, sizeof(pRes->srv.password) - 1); 431 } 494 defaultPassword = 0; 495 } 496 497 t = 0, q = NULL; 498 rc = ph->fsphQueryStringProperty (pRes->properties, "SPASSWORD", &q, &t); 499 if ( rc == NO_ERROR 500 && *q != '\0' 501 && defaultPassword) 502 { 503 char p[1024]; 504 p[0] = 0; 505 506 decryptPassword (q, p); 507 508 if (*p) 509 { 510 StrNCpy(pRes->srv.password, p, sizeof(pRes->srv.password) - 1); 511 512 /* clear the plain password */ 513 ph->fsphSetProperty (pRes->properties, "PASSWORD", ""); 514 } 515 } 516 else 517 { 518 char c[1024]; 519 encryptPassword (pRes->srv.password, c); 520 521 ph->fsphSetProperty (pRes->properties, "SPASSWORD", c); 522 523 // clear the plain password 524 ph->fsphSetProperty (pRes->properties, "PASSWORD", ""); 525 } 432 526 433 527 t = 0, q = NULL; … … 2017 2111 int APIENTRY NdpIOCTL (int type, HRESOURCE resource, char *path, int function, void *in, ULONG insize, PULONG poutlen) 2018 2112 { 2019 log("NdpIOCTL <%s> %d %d\n", path, function, ERROR_NOT_SUPPORTED); 2020 return ERROR_NOT_SUPPORTED; 2113 log("NdpIOCTL <%s> %d\n", path, function); 2114 2115 if (in && insize > 4096) 2116 { 2117 sprintf (in, "SAMBA IOCTL function = %d, parms [%s] insize = %d, *poutlen = %d", function, in, insize, *poutlen); 2118 *poutlen = insize; 2119 return NO_ERROR; 2120 } 2121 2122 return ERROR_NOT_SUPPORTED; 2021 2123 } 2022 2124 -
trunk/samba/source/ndpsmb/rc/rc.dlg
r66 r117 31 31 DT_BOTTOM 32 32 ENTRYFIELD "", ENT_PASS, 67, 70, 100, 8, ES_MARGIN | ES_UNREADABLE 33 ENTRYFIELD "", ENT_SPASS, 0, 0, 0, 0, ES_MARGIN | 34 ES_UNREADABLE | NOT WS_TABSTOP | NOT WS_VISIBLE 33 35 34 36 RTEXT "Master", LBL_MASTER, 5, 57, 30, 10, -
trunk/samba/source/ndpsmb/rc/rc.h
r5 r117 24 24 #define LBL_EASUPPORT 1021 25 25 #define CHK_EASUPPORT 1022 26 #define ENT_SPASS 1023 -
trunk/samba/source/ndpsmb/rc/rc.rc
r9 r117 145 145 RCDATA (DLG_ID + 11) 146 146 { 147 ENT_SPASS, PARMTYPE_STRING, 1L, 255L, "spassword", "%s", "" 148 } 149 150 RCDATA (DLG_ID + 12) 151 { 147 152 0 148 153 } -
trunk/samba/source/ndpsmb/smbcd.c
r75 r117 11 11 #include "smbwrp.h" 12 12 #include "smbcd.h" 13 #include "config.h" 13 14 14 15 #define SMBCD_MAX_THREADS 250 15 16 16 17 int debuglevel = 0; 18 int krb5support = 0; 17 19 HMTX logmutex = 0; 18 20 char *logfile = NULL; … … 306 308 data = req->param + req->paramlen; 307 309 // memset(res, 0, sizeof(*res)); 310 308 311 debuglocal(1,"Client request %d paramlen %d len %d, reconnect %d. State %08x\n", req->request, req->paramlen, req->length, *reconnect, cli); 309 312 if (*reconnect == 2) 310 313 { 311 314 debuglocal(1,"Reconnecting to last server requested\n"); 312 res->rc = smbwrp_connect(srv, _cli );315 res->rc = smbwrp_connect(srv, _cli, krb5support); 313 316 if (res->rc) 314 317 { … … 343 346 break; 344 347 } 345 res->rc = smbwrp_connect((smbwrp_server *)req->param, _cli );348 res->rc = smbwrp_connect((smbwrp_server *)req->param, _cli, krb5support); 346 349 if (!res->rc) 347 350 { … … 756 759 printf( "Daemon priority set to PRTYC_FOREGROUNDSERVER\n"); 757 760 #endif 758 761 debuglocal(0,"Entering main()\n"); 759 762 for (argc--, argv++; argc > 0; argc--, argv++) 760 763 { … … 813 816 } 814 817 } 818 #ifdef HAVE_KRB5_H 819 krb5support = 1; 820 #else 821 krb5support = 0; 822 #endif 815 823 if (rc) 816 824 { -
trunk/samba/source/ndpsmb/smbwrp.c
r75 r117 373 373 return a connection to a server 374 374 *******************************************************/ 375 int _System smbwrp_connect(smbwrp_server * srv, struct cli_state ** cli )375 int _System smbwrp_connect(smbwrp_server * srv, struct cli_state ** cli, int krb5support) 376 376 { 377 377 char * server = srv->server_name; … … 387 387 zero_ip(&ip); 388 388 389 debuglocal(1,"Connecting to \\\\%s: %s@%s:%s\\%s. Master %s:%d\n", srv->username, srv->password,workgroup, server, share, srv->master, srv->ifmastergroup);389 debuglocal(1,"Connecting to \\\\%s:*********@%s:%s\\%s. Master %s:%d\n", srv->username, workgroup, server, share, srv->master, srv->ifmastergroup); 390 390 391 391 if (!*server) { … … 434 434 return 3; 435 435 } 436 437 if (krb5support == 1){ 438 debuglocal(1,"Kerberos support enabled\n"); 439 c->use_kerberos = True;} 440 436 441 if (!cli_session_request(c, &calling, &called)) { 437 442 cli_shutdown(c); … … 450 455 } 451 456 452 debuglocal(4," session setuping for <%s>/< %s> %d in <%s> %08x %08x %08x\n", srv->username, srv->password, strlen(srv->password),workgroup, c->protocol, c->sec_mode, c->capabilities);457 debuglocal(4," session setuping for <%s>/<********> in <%s> %08x %08x %08x\n", srv->username, workgroup, c->protocol, c->sec_mode, c->capabilities); 453 458 454 459 if (!NT_STATUS_IS_OK(cli_session_setup(c, srv->username, … … 456 461 srv->password, strlen(srv->password), 457 462 workgroup))) { 458 debuglocal(4,"%s/ %s login failed\n", srv->username, srv->password);463 debuglocal(4,"%s/******** login failed\n", srv->username); 459 464 /* try an anonymous login if it failed */ 460 465 if (!NT_STATUS_IS_OK(cli_session_setup(c, "", "", 1,"", 0, workgroup))) { … … 465 470 } 466 471 467 debuglocal(4," session setup ok. Sending tconx <%s> < %s> %d\n", share, srv->password, strlen(srv->password));472 debuglocal(4," session setup ok. Sending tconx <%s> <********>\n", share); 468 473 469 474 if (!cli_send_tconX(c, share, "?????", … … 1022 1027 if (!finfo) finfo = &finfo1; 1023 1028 1024 // memcpy(finfo,&def_finfo,sizeof(*finfo)); 1029 if (p_resume_key) { 1030 *p_resume_key = 0; 1031 } 1032 1025 1033 finfo->attr = def_finfo.mode; 1026 1034 finfo->mtime = def_finfo.mtime_ts.tv_sec; … … 1047 1055 p += clistr_pull(cli, finfo->fname, p, 1048 1056 sizeof(finfo->fname), 1049 len+2, 1057 len+2, 1050 1058 STR_TERMINATE); 1051 1059 finfo->easize = -1; … … 1074 1082 size_t namelen, slen; 1075 1083 p += 4; /* next entry offset */ 1076 #if 01077 1084 if (p_resume_key) { 1078 1085 *p_resume_key = IVAL(p,0); 1079 1086 } 1080 #endif 1087 1081 1088 p += 4; /* fileindex */ 1082 1089 … … 1157 1164 smbwrp_fileinfo finfo; 1158 1165 int i; 1159 char * tdl, *dirlist = NULL;1166 char *dirlist = NULL; 1160 1167 int dirlist_len = 0; 1161 1168 int total_received = -1; … … 1163 1170 int ff_searchcount=0; 1164 1171 int ff_eos=0; 1165 //int ff_lastname=0;1166 1172 int ff_dir_handle=0; 1167 1173 int loop_count = 0; … … 1176 1182 1177 1183 /* NT uses 260, OS/2 uses 2. Both accept 1. */ 1178 info_level = (cli->capabilities&CAP_NT_SMBS)?260:2; 1184 info_level = (cli->capabilities&CAP_NT_SMBS)?260:2; 1179 1185 1180 1186 debuglocal(4,"list_files level %d. mask <%s>\n", info_level, mask); … … 1199 1205 SSVAL(param,0,attribute); /* attribute */ 1200 1206 SSVAL(param,2,max_matches); /* max count */ 1201 //SSVAL(param,4,4+2); /* resume required + close on end */1202 1207 SSVAL(param,4,(FLAG_TRANS2_FIND_REQUIRE_RESUME|FLAG_TRANS2_FIND_CLOSE_IF_END)); /* resume required + close on end */ 1203 1208 SSVAL(param,6,info_level); … … 1210 1215 SSVAL(param,0,ff_dir_handle); 1211 1216 SSVAL(param,2,max_matches); /* max count */ 1212 //SIVAL(param,6,0); /* ff_resume_key */1213 1217 SSVAL(param,4,info_level); 1214 1218 /* For W2K servers serving out FAT filesystems we *must* set the … … 1218 1222 can miss filenames. Use last filename continue instead. JRA */ 1219 1223 SSVAL(param,10,(FLAG_TRANS2_FIND_REQUIRE_RESUME|FLAG_TRANS2_FIND_CLOSE_IF_END)); /* resume required + close on end */ 1220 //SSVAL(param,10,8+4+2); /* continue + resume required + close on end */1221 1224 p = param+12; 1222 //p += clistr_push(cli, param+12, mask, sizeof(param)-12,1223 // STR_TERMINATE);1224 1225 if (last_name_raw_len && (last_name_raw_len < (sizeof(param)-12))) { 1225 1226 memcpy(p, last_name_raw.data, last_name_raw_len); … … 1231 1232 1232 1233 param_len = PTR_DIFF(p, param); 1234 1233 1235 if (!cli_send_trans(cli, SMBtrans2, 1234 1236 NULL, /* Name */ … … 1266 1268 } 1267 1269 1268 1269 1270 if (cli_is_error(cli) || !rdata || !rparam) 1270 1271 { … … 1290 1291 ff_searchcount = SVAL(p,2); 1291 1292 ff_eos = SVAL(p,4); 1292 //ff_lastname = SVAL(p,8);1293 1293 } else { 1294 1294 ff_searchcount = SVAL(p,0); 1295 1295 ff_eos = SVAL(p,2); 1296 //ff_lastname = SVAL(p,6);1297 1296 } 1298 1297 debuglocal(4,"list_files %d %d %d %d\n", ff_searchcount, ff_eos, "(ff_lastname)", First); -
trunk/samba/source/ndpsmb/smbwrp.h
r75 r117 121 121 int _System smbwrp_getclisize(void); 122 122 int _System smbwrp_init(void); 123 int _System smbwrp_connect(smbwrp_server * srv, cli_state ** c );123 int _System smbwrp_connect(smbwrp_server * srv, cli_state ** c, int krb5support); 124 124 void _System smbwrp_disconnect(cli_state ** cli); 125 125 int _System smbwrp_open(cli_state * cli, smbwrp_file * file);
Note:
See TracChangeset
for help on using the changeset viewer.