int main (int argc, char *argv[]) { int pid,index,usable; char *pgname; pgname = argv[0]; if (argc < 2) { printf("%s: nothing to do\n",pgname); exit(0); } /* printf("Real UID\tReal GID\tEff UID\tEff GID\n"); */ init_privs(); set_privs(); while (argc > 1) { usable = 1; for (index=0; index < strlen(argv[1]); index++) { if (!isdigit(argv[1][index])) { usable = 0; break; } } if (usable) { pid = atoi(argv[1]); /* printf("pid is %d\n",pid); */ kill(pid,SIGUSR1); } else printf("%s: invalid argument %s\n",pgname,argv[1]); argc--; argv++; } drop_privs(); exit(0); }
int main(int argc, char *argv[]) { pool *p; const char *remote_name; pr_netaddr_t *remote_addr; conn_t *client_conn, *ctrl_conn, *data_conn; unsigned int connect_timeout, remote_port; struct proxy_ftp_client *ftp; int res, timerno; char buf[1024]; /* Seed the random number generator. */ /* XXX Use random(3) in the future? */ srand((unsigned int) (time(NULL) * getpid())); init_pools(); init_privs(); init_log(); init_regexp(); init_inet(); init_netio(); init_netaddr(); init_fs(); init_class(); init_config(); init_stash(); pr_log_setdebuglevel(10); log_stderr(TRUE); pr_trace_use_stderr(TRUE); pr_trace_set_levels("DEFAULT", 1, 20); p = make_sub_pool(permanent_pool); pr_pool_tag(p, "FTP Client Pool"); remote_name = "ftp.proftpd.org"; remote_addr = pr_netaddr_get_addr(p, remote_name, NULL); if (remote_addr == NULL) { fprintf(stderr, "Failed to get addr for '%s': %s\n", remote_name, strerror(errno)); destroy_pool(p); return 1; } fprintf(stdout, "Resolved name '%s' to IP address '%s'\n", remote_name, pr_netaddr_get_ipstr(remote_addr)); remote_port = 21; connect_timeout = 5; ftp = proxy_ftp_connect(p, remote_addr, remote_port, connect_timeout, NULL); if (ftp == NULL) { fprintf(stderr, "Error connecting to FTP server: %s\n", strerror(errno)); destroy_pool(p); return 1; } fprintf(stdout, "Successfully connected to %s:%d from %s:%d\n", remote_name, remote_port, pr_netaddr_get_ipstr(client_conn->local_addr), ntohs(pr_netaddr_get_port(client_conn->local_addr))); res = proxy_ftp_disconnect(ftp); if (res < 0) { fprintf(stderr, "Error disconnecting from FTP server: %s\n", strerror(errno)); destroy_pool(p); return 1; } ctrl_conn = pr_inet_openrw(p, client_conn, NULL, PR_NETIO_STRM_OTHR, -1, -1, -1, FALSE); if (ctrl_conn == NULL) { fprintf(stderr, "Error opening control connection: %s\n", strerror(errno)); pr_inet_close(p, client_conn); destroy_pool(p); return 1; } fprintf(stdout, "Reading response from %s:%d\n", remote_name, remote_port); /* Read the response */ memset(buf, '\0', sizeof(buf)); /* XXX We need to write our own version of netio_telnet_gets(), with * the buffering to handle reassembly of a full FTP response out of * multiple TCP packets. Not sure why the existing netio_telnet_gets() * is not sufficient. But we don't need the handling of Telnet codes * in our reading. But DO generate the 'core.ctrl-read' event, so that * any event listeners get a chance to process the data we've received. * (Or maybe use 'mod_proxy.server-read', and differentiate between * client and server reads/writes?) */ if (pr_netio_read(ctrl_conn->instrm, buf, sizeof(buf)-1, 5) < 0) { fprintf(stderr, "Error reading response from server: %s\n", strerror(errno)); } else { fprintf(stdout, "Response: \"%s\"\n", buf); } /* Disconnect */ res = pr_netio_printf(ctrl_conn->outstrm, "%s\r\n", C_QUIT); if (res < 0) { fprintf(stderr, "Error writing command to server: %s", strerror(errno)); } pr_inet_close(p, ctrl_conn); pr_inet_close(p, client_conn); destroy_pool(p); return 0; }
int main(int argc,char **argv) { const char *name; int i; init_privs(); #ifdef __EMX__ _wildcard(&argc,&argv); #endif /*#define PRIV_TEST*/ #ifdef PRIV_TEST { int euid; char command[100]; printf("INIT: %d %d\n", getuid(), geteuid()); drop_privs(); printf("DROP: %d %d\n", getuid(), geteuid()); reclaim_privs(); printf("RECLAIM: %d %d\n", getuid(), geteuid()); euid = geteuid(); if(argc & 1) { drop_privs(); printf("DROP: %d %d\n", getuid(), geteuid()); } if(!((argc-1) & 2)) { destroy_privs(); printf("DESTROY: %d %d\n", getuid(), geteuid()); } sprintf(command, "a.out %d", euid); system(command); return 1; } #endif #ifdef __EMX__ _wildcard(&argc,&argv); #endif /* check whether the compiler lays out structures in a sane way */ if(sizeof(struct partition) != 16 || sizeof(struct directory) != 32 || sizeof(struct vfat_subentry) !=32) { fprintf(stderr,"Mtools has not been correctly compiled\n"); fprintf(stderr,"Recompile it using a more recent compiler\n"); return 137; } #ifdef __EMX__ argv[0] = _getname(argv[0]); _remext(argv[0]); name = argv[0]; #else name = _basename(argv[0]); #endif #if 0 /* this allows the different tools to be called as "mtools -c <command>" ** where <command> is mdir, mdel, mcopy etcetera ** Mainly done for the BeOS, which doesn't support links yet. */ if(argc >= 3 && !strcmp(argv[1], "-c") && !strcmp(name, "mtools")) { argc-=2; argv+=2; name = argv[0]; } #endif /* print the version */ if(argc >= 2 && (strcmp(argv[1], "-V") == 0 || strcmp(argv[1], "--version") ==0)) { printf("%c%s version %s, dated %s\n", toupper(name[0]), name+1, mversion, mdate); printf("configured with the following options: "); #ifdef USE_XDF printf("enable-xdf "); #else printf("disable-xdf "); #endif #ifdef USING_VOLD printf("enable-vold "); #else printf("disable-vold "); #endif #ifdef USING_NEW_VOLD printf("enable-new-vold "); #else printf("disable-new-vold "); #endif #ifdef DEBUG printf("enable-debug "); #else printf("disable-debug "); #endif #ifdef USE_RAWTERM printf("enable-raw-term "); #else printf("disable-raw-term "); #endif printf("\n"); return 0; } if (argc >= 2 && strcmp(name, "mtools") == 0) { /* mtools command ... */ argc--; argv++; name = argv[0]; } progname = argv[0]; read_config(); setup_signal(); for (i = 0; i < NDISPATCH; i++) { if (!strcmp(name,dispatch[i].cmd) || (name[0] == 'm' && !strcmp(name+1,dispatch[i].cmd))) dispatch[i].fn(argc, argv, dispatch[i].type); } if (strcmp(name,"mtools")) fprintf(stderr,"Unknown mtools command '%s'\n",name); fprintf(stderr,"Usage: mtools [-V] command [-options] arguments ...\n"); fprintf(stderr,"Supported commands:"); for (i = 0; i < NDISPATCH; i++) { fprintf(stderr, i%8 == 0 ? "\n\t" : ", "); fprintf(stderr, "%s", dispatch[i].cmd); } putc('\n', stderr); fprintf(stderr, "Use 'mtools command -?' for help per command\n"); return 1; }