1#include <stdlib.h> 2 3static void 4get_auth_data_fn(const char * pServer, 5 const char * pShare, 6 char * pWorkgroup, 7 int maxLenWorkgroup, 8 char * pUsername, 9 int maxLenUsername, 10 char * pPassword, 11 int maxLenPassword) 12{ 13 char temp[128]; 14 char server[256] = { '\0' }; 15 char share[256] = { '\0' }; 16 char workgroup[256] = { '\0' }; 17 char username[256] = { '\0' }; 18 char password[256] = { '\0' }; 19 20 static int krb5_set = 1; 21 22 if (strcmp(server, pServer) == 0 && 23 strcmp(share, pShare) == 0 && 24 *workgroup != '\0' && 25 *username != '\0') 26 { 27 strncpy(pWorkgroup, workgroup, maxLenWorkgroup - 1); 28 strncpy(pUsername, username, maxLenUsername - 1); 29 strncpy(pPassword, password, maxLenPassword - 1); 30 return; 31 } 32 33 if (krb5_set && getenv("KRB5CCNAME")) { 34 krb5_set = 0; 35 return; 36 } 37 38 fprintf(stdout, "Workgroup: [%s] ", pWorkgroup); 39 fgets(temp, sizeof(temp), stdin); 40 41 if (temp[strlen(temp) - 1] == '\n') /* A new line? */ 42 { 43 temp[strlen(temp) - 1] = '\0'; 44 } 45 46 if (temp[0] != '\0') 47 { 48 strncpy(pWorkgroup, temp, maxLenWorkgroup - 1); 49 } 50 51 fprintf(stdout, "Username: [%s] ", pUsername); 52 fgets(temp, sizeof(temp), stdin); 53 54 if (temp[strlen(temp) - 1] == '\n') /* A new line? */ 55 { 56 temp[strlen(temp) - 1] = '\0'; 57 } 58 59 if (temp[0] != '\0') 60 { 61 strncpy(pUsername, temp, maxLenUsername - 1); 62 } 63 64 fprintf(stdout, "Password: "); 65 fgets(temp, sizeof(temp), stdin); 66 67 if (temp[strlen(temp) - 1] == '\n') /* A new line? */ 68 { 69 temp[strlen(temp) - 1] = '\0'; 70 } 71 72 if (temp[0] != '\0') 73 { 74 strncpy(pPassword, temp, maxLenPassword - 1); 75 } 76 77 strncpy(workgroup, pWorkgroup, sizeof(workgroup) - 1); 78 strncpy(username, pUsername, sizeof(username) - 1); 79 strncpy(password, pPassword, sizeof(password) - 1); 80 81 krb5_set = 1; 82} 83