static bool print_tree(struct user_auth_info *user_info) { struct smb_name_list *wg, *sv, *sh; /* List workgroups */ if (!get_workgroups(user_info)) return False; for (wg = workgroups; wg; wg = wg->next) { printf("%s\n", wg->name); /* List servers */ free_name_list(servers); servers = NULL; if (level == LEV_WORKGROUP || !get_servers(wg->name, user_info)) continue; for (sv = servers; sv; sv = sv->next) { printf("\t\\\\%-15s\t\t%s\n", sv->name, sv->comment); /* List shares */ free_name_list(shares); shares = NULL; if (level == LEV_SERVER || !get_shares(sv->name, user_info)) continue; for (sh = shares; sh; sh = sh->next) { printf("\t\t\\\\%s\\%-15s\t%s\n", sv->name, sh->name, sh->comment); } } } return True; }
void *get_serverlists(void *value) { struct name_list *wg, *sv; //struct smbEventProxyCmd *pcmd = (struct smbEventProxyCmd *)cmd; char buf[MAX_NAME_LEN] = {0}; int get_serverlists_by_nmblookup_state = 0; /*0:fail; 1:ok*/ int id = (int *)value; struct smbEventProxyCmd *pevent = NULL; char samba_workgroup[16] = {0}; #ifdef CONF_SAMBA_SUPPORT_ONLY_BROWSE_WORKGROUP_SERVERS securesoho_samba_workgroup_get(samba_workgroup); #else //CONF_SAMBA_SUPPORT_ONLY_BROWSE_WORKGROUP_SERVERS get_serverlists_by_nmblookup_state = get_serverlists_by_nmblookup(id); #endif //CONF_SAMBA_SUPPORT_ONLY_BROWSE_WORKGROUP_SERVERS /* List workgroups */ if(workgroups) { free_name_list(workgroups); workgroups = NULL; } if (!get_workgroups(&cmdline_auth_info)) { is_getserver_done = 1; #ifdef CONF_SAMBA_SUPPORT_ONLY_BROWSE_WORKGROUP_SERVERS SMBTREE_send_event_to_OSD(SMB_CMD_REFRESH_SERVER_RESPONSE, SMB_REFRESHED_FAILED, id, NULL); printf("%s[%d], It's finish to search samba server(s).\n", __FILE__, __LINE__); return NULL; #else //CONF_SAMBA_SUPPORT_ONLY_BROWSE_WORKGROUP_SERVERS if(get_serverlists_by_nmblookup_state) { SMBTREE_send_event_to_OSD(SMB_CMD_REFRESH_SERVER_RESPONSE, SMB_REFRESHED_OK, id, NULL); printf("%s[%d], It's finish to search samba server(s). id:[%d]\n", __FILE__, __LINE__, id); return NULL; } else { SMBTREE_send_event_to_OSD(SMB_CMD_REFRESH_SERVER_RESPONSE, SMB_REFRESHED_FAILED, id, NULL); printf("%s[%d], It's finish to search samba server(s).\n", __FILE__, __LINE__); return NULL; } #endif //CONF_SAMBA_SUPPORT_ONLY_BROWSE_WORKGROUP_SERVERS } for (wg = workgroups; wg; wg = wg->next) { #ifdef ENABLE_SMBTREE_DEBUG_MODE printf("%s[%d], WorkGroup : [%s]\n", __FILE__, __LINE__, wg->name); #endif //ENABLE_SMBTREE_DEBUG_MODE /* List servers */ #ifdef CONF_SAMBA_SUPPORT_ONLY_BROWSE_WORKGROUP_SERVERS printf("samba_workgroup:[%s], wg->name:[%s]\n", samba_workgroup, wg->name); if(strcasecmp(samba_workgroup, wg->name) != 0) continue; #endif //CONF_SAMBA_SUPPORT_ONLY_BROWSE_WORKGROUP_SERVERS if(servers) { free_name_list(servers); servers = NULL; } if (level == LEV_WORKGROUP || !get_servers(wg->name, &cmdline_auth_info)) continue; for (sv = servers; sv; sv = sv->next) { char* ip = NULL; nmblookup_ip(sv->name, &ip); if(ip != NULL) { snprintf(buf, sizeof(buf), "%s\\%s\\0", sv->name,ip); #ifdef ENABLE_SMBTREE_DEBUG_MODE printf("\t\\\\%-15s\t\t%s buf:%s\n", sv->name, sv->comment, buf); #endif //ENABLE_SMBTREE_DEBUG_MODE #ifdef ENABLE_PTHREAD pevent = malloc(sizeof(struct smbEventProxyCmd)); pevent->cmd = SMB_CMD_REFRESH_SERVER_RESPONSE; pevent->status = SMB_REFRESHING; pevent->id = id; pevent->datalen = strlen(buf) + 1; strcpy((char *)pevent->data, buf); XLinkedList_Lock(serverlist); XLinkedList_AddTail(serverlist, (void *)pevent); XLinkedList_UnLock(serverlist); #else SMBTREE_send_event_to_OSD(SMB_CMD_REFRESH_SERVER_RESPONSE, SMB_REFRESHING, id, buf); #endif free(ip); ip = NULL; } } } printf("%s[%d], It's finish to search samba server(s). id:[%d]\n", __FILE__, __LINE__, id); SMBTREE_send_event_to_OSD(SMB_CMD_REFRESH_SERVER_RESPONSE, SMB_REFRESHED_OK, id, NULL); is_getserver_done = 1; if(workgroups) { free_name_list(workgroups); workgroups = NULL; } if(servers) { free_name_list(servers); servers = NULL; } return NULL; }