Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:11.4
pure-ftpd
pure-ftpd-1.0.22-oes-bugfix-534424.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File pure-ftpd-1.0.22-oes-bugfix-534424.patch of Package pure-ftpd
--- src/ftpd.c 2010-09-24 12:29:10.000000000 +0530 +++ src/ftpd.c 2010-09-27 11:13:54.000000000 +0530 @@ -55,7 +55,8 @@ const char* SERV_LIST_FILE = "/var/opt/n #define MAX_PATH_SIZE 1000 #define MAX_IP_SIZE 20 #define MAX_NO_OF_SERVERS 300 - +#define SITE_MSG "NCP Servers in the NDS Tree" +#define CHK_MOD_TIME 3600 char serverInfo[MAX_NO_OF_SERVERS][120]; const char MOUNT_PATH[] = "/var/opt/novell/nclmnt"; @@ -63,6 +64,7 @@ const int MOUNT_PATH_SIZE = 22; char userFDN[512]; static const char *getlocalhostname(); +void extractEdir_IP_Port(char *); #ifndef HAVE_SYS_FSUID_H @@ -5358,9 +5360,8 @@ int main(int argc, char *argv[]) } case '3': { - edir_ldap_port = atoi(optarg); - if(edir_ldap_port <= 0 ) - edir_ldap_port = 389; + /* Extract E-directory IP address & Port number */ + extractEdir_IP_Port(optarg); break; } case '2': { @@ -6162,6 +6163,9 @@ int edir_login(const char* user,const ch char* data[9]; char* context; + char tree[256] ={0}; + char server[256] ={0}; + context = index(userFDN,'.'); if(context != NULL) context++; @@ -6173,8 +6177,11 @@ int edir_login(const char* user,const ch exit(0); } - data[0] ="-t 127.0.0.1"; - data[1] ="-s 127.0.0.1"; + snprintf(tree,sizeof(tree),"-t %s",edir_ip_address); + snprintf(server,sizeof(server),"-s %s",edir_ip_address); + + data[0] =tree; + data[1] =server; data[2] ="-u" ; data[3] = (char*)user; data[4] ="-c" ; data[5] = (char*)context; data[6] ="-p" ; data[7] = (char*)passwd; @@ -6252,18 +6259,18 @@ int edir_login(const char* user,const ch int mount_remote_server(const char* where,char* nss_loc,char* remote_server) { - char tmp[MAX_PATH_SIZE+1000],path[MAX_PATH_SIZE]; + char tmp[2*MAX_PATH_SIZE] = {0},path[MAX_PATH_SIZE] = {0}; char* str1,*server; int err,i; struct hostent *he; struct in_addr ipv4addr; //mnt_loc - mounted path name by novell client (server name) //ncl_req_name - Request used in novell client (IP - preferably) - char mnt_loc[MAX_SERVER_SIZE],ncl_req_name[MAX_SERVER_SIZE],ip[MAX_IP_SIZE]; + char mnt_loc[MAX_SERVER_SIZE] ={0},ncl_req_name[MAX_SERVER_SIZE] = {0},ip[MAX_IP_SIZE] = {0}; struct in_addr addr; char* context = NULL; - if((where != NULL ) &&(strncmp(where,"//",2 ) ==0)) + if((where != NULL ) && (strncmp(where,"//",2 ) ==0) && (strlen(where) > 2) ) { if( no_of_server <= 0) @@ -6276,6 +6283,11 @@ int mount_remote_server(const char* wher str1 = (char*) where+2; server = strtok(str1,"/"); + if ( NULL == server) + { + return -1; + } + /* Get the server name/ip address of remote server Remote server name in ftp request can be either server name / DNS name / IP @@ -6413,19 +6425,89 @@ int get_remote_server_path(char* path) return 0; } -// response for site slist command +/** + * Description: This function is used to extract E-directory IP address + * and Port number. + * + * Input: Charcter string which have IP address & port number. + * + * Output: None. + */ +void extractEdir_IP_Port(char *optarg) +{ + char *ip_address; + char *port; + + /* extract ip address */ + ip_address=strtok(optarg,":"); + + /* extract port and validate the port */ + if ( (NULL != ip_address) && (NULL != (port= strtok(NULL,":")))) + { + edir_ip_address = strdup(ip_address); + edir_ldap_port = atoi(port); + + if((edir_ldap_port <= 0) || (edir_ldap_port > 65535)) + edir_ldap_port = 389; + } + else + { + /* Assign default IP address & port number */ + edir_ip_address = "127.0.0.1"; + edir_ldap_port = 389; + } + + return; +} + +/** + * Description: This function is used to get file modified + * time in seconds. + * + * Input: fileName - file from which modified time to be calculated. + * + * Output: integer which holds the modified time in seconds + */ +static int getModTime(char *fileName) +{ + struct stat fileStat = {0}; + struct timeval curTime = {0}; + + // get the file status from the file. + if (stat(fileName,&fileStat) < 0) + { + return -1; + } + + // get the current time. + gettimeofday(&curTime,NULL); + + return (curTime.tv_sec - fileStat.st_mtime); +} + +/** + * Description: This function is used to response for site slist command. + * + * Input: None + * + * Output: integer which return the status + * + */ int do_list_servers() { FILE* file; char buffer[2*MAX_SERVER_FDN_SIZE]; int serverLen; - char server[200],*ip; + char server[200],countMsg[128]={0},*ip; + int nodeCount= 0; - if( ( no_of_server <= 0) && (get_server_list_from_file() < 0)) + if( (( no_of_server <= 0) && (get_server_list_from_file() < 0)) || (getModTime(SERV_LIST_FILE) >= CHK_MOD_TIME)) get_server_list_from_edir(); - file = fopen (SERV_LIST_FILE,"r"); + // Code added for Bug Fix: "534424 - FTP-RSN: Site slist doesn't list server count as in netware" + addreply_noformat(200, SITE_MSG); + file = fopen (SERV_LIST_FILE,"r"); if(file != NULL) { while (!feof (file)) @@ -6442,12 +6524,19 @@ int do_list_servers() serverLen = MAX_SERVER_FDN_SIZE; snprintf(server,serverLen+1,"%s",buffer); - addreply_noformat(0, server); + + // Code added for Bug Fix: "534424 - FTP-RSN: Site slist doesn't list server count as in netware" + addreply_noformat(200, server); + nodeCount++; } fclose(file); } + // Code added for Bug Fix: "534424 - FTP-RSN: Site slist doesn't list server count as in netware" + sprintf(countMsg," %d \"NCP Server\"(s)",nodeCount); + addreply_noformat(200, countMsg); + return 0; } @@ -6455,7 +6544,7 @@ int do_list_servers() int ldap_connect(const char* username,const char*passwd) { - ldapHandle = ldap_init("127.0.0.1",edir_ldap_port); + ldapHandle = ldap_init(edir_ip_address,edir_ldap_port); if (ldapHandle == NULL) { return -1; --- src/globals.h 2010-09-24 12:29:10.000000000 +0530 +++ src/globals.h 2010-09-24 12:20:33.000000000 +0530 @@ -30,6 +30,7 @@ GLOBAL0(signed char no_ipv4); GLOBAL0(signed char remote_server); /* OES remote server supported or not*/ GLOBAL0(signed char disallow_list_oes_server); /* list remote OES server supported or not*/ GLOBAL(unsigned int edir_ldap_port,389); /* edirectory ldap port*/ +GLOBAL0(char *edir_ip_address); /* edirectory ip address */ GLOBAL0(char *default_home_dir); /* default home dir */ GLOBAL(const size_t cmdsize, MAXPATHLEN + 16U); GLOBAL0(char cmd[MAXPATHLEN + 32U]); /* command line - about 30 chars for command */
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor