⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmds.c

📁 socket5 代理服务代码 socket5 代理服务代码
💻 C
📖 第 1 页 / 共 4 页
字号:
/* VARARGS                                                                   */void setprompt() {  interactive = !interactive;  printf("Interactive mode %s.\n", onoff(interactive));  code = interactive;}/* Toggle metacharacter interpretation on local file names.                  *//*                                                                           *//* VARARGS                                                                   */void setglob() {  doglob = !doglob;  printf("Globbing %s.\n", onoff(doglob));  code = doglob;}/* Set debugging mode on/off and/or set level of debugging.                  *//*                                                                           *//* VARARGS                                                                   */void setdebug(int argc, char *argv[]) {  int val;  if (argc > 1) {    val = atoi(argv[1]);    if (val < 0) {      printf("%s: bad debugging value.\n", argv[1]);      code = -1;      return;    }  } else    val = !debug;  debug = val;  if (debug)    options |= SO_DEBUG;  else    options &= ~SO_DEBUG;  printf("Debugging %s (debug=%d).\n", onoff(debug), debug);  code = debug > 0;}/* Set current working directory on remote machine.                          */void cd(int argc, char **argv) {  if (argc < 2 && !another(&argc, &argv, "remote-directory")) {    printf("usage: %s remote-directory\n", argv[0]);    code = -1;    return;  }  if (command("CWD %s\r\n", argv[1]) == ERROR && code == 500) {    if (verbose) printf("CWD command not recognized, trying XCWD\n");    command("XCWD %s\r\n", argv[1]);  }}/* Set current working directory on local machine.                           */void lcd(int argc, char **argv) {  char buf[MAXPATHLEN];  if (argc < 2)    argc++, argv[1] = home;  if (argc != 2) {    printf("usage: %s local-directory\n", argv[0]);    code = -1;    return;  }  if (!globulize(&argv[1])) {    code = -1;    return;  }  if (chdir(argv[1]) < 0) {    fprintf(stderr, "local: %s: %s\n", argv[1], strerror(errno));    code = -1;    return;  }#ifdef HAVE_GETCWD  printf("Local directory now %s\n", getcwd(buf, MAXPATHLEN-1));#else  printf("Local directory now %s\n", getwd(buf));#endif  code = 0;}/* Delete a single file.                                                     */void delete(int argc, char *argv[]) {  if (argc < 2 && !another(&argc, &argv, "remote-file")) {    printf("usage: %s remote-file\n", argv[0]);    code = -1;    return;  }  command("DELE %s\r\n", argv[1]);}/* Delete multiple files.                                                    */void mdelete(int argc, char *argv[]) {  extern jmp_buf jabort;  Sig_t oldintr;  int ointer;  char *cp;  void mabort();      if (argc < 2 && !another(&argc, &argv, "remote-files")) {    printf("usage: %s remote-files\n", argv[0]);    code = -1;    return;  }  mflag = 1;  mname = argv[0];  oldintr = Signal(SIGINT, mabort);  setjmp(jabort);  while ((cp = remglob(argv,0)) != NULL) {    if (*cp == '\0') {      mflag = 0;      continue;    }    if (mflag && confirm(argv[0], cp)) {      command("DELE %s\r\n", cp);      if (!mflag && fromatty) {	ointer = interactive;	interactive = 1;	if (confirm("Continue with", "mdelete")) {	  mflag++;	}	interactive = ointer;      }    }  }  Signal(SIGINT, oldintr);  mflag = 0;}/* Rename a remote file.                                                     */void renamefile(int argc, char *argv[]) {  if (argc < 2 && !another(&argc, &argv, "from-name"))    goto usage;  if (argc < 3 && !another(&argc, &argv, "to-name")) {  usage:    printf("%s from-name to-name\n", argv[0]);    code = -1;    return;  }  if (command("RNFR %s\r\n", argv[1]) == CONTINUE)    command("RNTO %s\r\n", argv[2]);}/* Get a directory listing                                                   *//* of remote files.                                                          */void ls(int argc, char *argv[]) {  char *cmd;  if (argc < 2) argc++, argv[1] = NULL;  if (argc < 3) argc++, argv[2] = "-";  if (argc > 3) {    printf("usage: %s remote-directory local-file\n", argv[0]);    code = -1;    return;  }  cmd = argv[0][0] == 'n' ? "NLST" : "LIST";  if (strcmp(argv[2], "-") && !globulize(&argv[2])) {    code = -1;    return;  }  if (strcmp(argv[2], "-") && *argv[2] != '|')    if (!globulize(&argv[2]) || !confirm("output to local-file:", argv[2])) {      code = -1;      return;    }  recvrequest(cmd, argv[2], argv[1], "w", 0);}/* Get a directory listing                                                   *//* of multiple remote files.                                                 */void mls(int argc, char **argv) {  extern jmp_buf jabort;  Sig_t oldintr;  int ointer, i;  char *cmd, mode[1], *dest;  void mabort();  if (argc < 2 && !another(&argc, &argv, "remote-files"))    goto usage;  if (argc < 3 && !another(&argc, &argv, "local-file")) {  usage:    printf("usage: %s remote-files local-file\n", argv[0]);    code = -1;    return;  }  dest = argv[argc - 1];  argv[argc - 1] = NULL;  if (strcmp(dest, "-") && *dest != '|')    if (!globulize(&dest) ||	!confirm("output to local-file:", dest)) {      code = -1;      return;    }  cmd = argv[0][1] == 'l' ? "NLST" : "LIST";  mname = argv[0];  mflag = 1;  oldintr = Signal(SIGINT, mabort);  setjmp(jabort);  for (i = 1; mflag && i < argc-1; ++i) {    *mode = (i == 1) ? 'w' : 'a';    recvrequest(cmd, dest, argv[i], mode, 0);    if (!mflag && fromatty) {      ointer = interactive;      interactive = 1;      if (confirm("Continue with", argv[0])) {	mflag ++;      }      interactive = ointer;    }  }  Signal(SIGINT, oldintr);  mflag = 0;}/* Do a shell escape                                                         *//*                                                                           *//* ARGSUSED                                                                  */int shell(int argc, char **argv) {  int pid;  Sig_t old1, old2;  char shellnam[40], *shell, *namep;   int  status;  old1 = Signal (SIGINT, SIG_IGN);  old2 = Signal (SIGQUIT, SIG_IGN);  if ((pid = fork()) == 0) {    for (pid = 3; pid < 20; pid++)      close(pid);    Signal(SIGINT, SIG_DFL);    Signal(SIGQUIT, SIG_DFL);    shell = getenv("SHELL");    if (shell == NULL)      shell = _PATH_BSHELL;    namep = rindex(shell,'/');    if (namep == NULL)      namep = shell;    strcpy(shellnam,"-");    strcat(shellnam, ++namep);    if (strcmp(namep, "sh") != 0)      shellnam[0] = '+';    if (debug) {      printf ("%s\n", shell);      fflush (stdout);    }    if (argc > 1) {      execl(shell,shellnam,"-c",altarg,(char *)0);    }    else {      execl(shell,shellnam,(char *)0);    }    perror(shell);    code = -1;    exit(1);  }  if (pid > 0)    while (wait(&status) != pid) ;  Signal(SIGINT, old1);  Signal(SIGQUIT, old2);  if (pid == -1) {    perror("Try again later");    code = -1;  }  else {    code = 0;  }  return (0);}/* Send new user information (re-login)                                      */int user(int argc, char **argv) {  char acct[80], *GETPASS();  int n, aflag = 0;  if (argc < 2) {    another(&argc, &argv, "username");  }  if (argc < 2 || argc > 4) {    printf("usage: %s username [password] [account]\n", argv[0]);    code = -1;    return (0);  }  if ((n = command("USER %s\r\n", argv[1])) == CONTINUE) {    if (argc < 3 ){      if (!strcmp(argv[1], "anonymous") || !strcmp(argv[1], "ftp")) {	printf("Password: "); fflush(stdout);	fgets(acct, sizeof(acct) - 1, stdin);	acct[strlen(acct) - 1] = '\0';	argv[2] = acct;      } else	argv[2] = GETPASS("Password: ");      argc++;    }    n = command("PASS %s\r\n", argv[2]);  }  if (n == CONTINUE) {    if (argc < 4) {      printf("Account: "); fflush(stdout);      fgets(acct, sizeof(acct) - 1, stdin);      acct[strlen(acct) - 1] = '\0';      argv[3] = acct; argc++;    }    n = command("ACCT %s\r\n", argv[3]);    aflag++;  }  if (n != COMPLETE) {    fprintf(stdout, "Login failed.\n");    return (0);  }  if (!aflag && argc == 4) {    command("ACCT %s\r\n", argv[3]);  }  return (1);}/* Print working directory.                                                  *//*                                                                           *//* VARARGS                                                                   */void pwd() {  int oldverbose = verbose;  /* If we aren't verbose, this doesn't do anything!                         */  verbose = 1;  if (command("PWD\r\n") == ERROR && code == 500) {    printf("PWD command not recognized, trying XPWD\n");    command("XPWD\r\n");  }  verbose = oldverbose;}/* Make a directory.                                                         */void makedir(int argc, char *argv[]) {  if (argc < 2 && !another(&argc, &argv, "directory-name")) {    printf("usage: %s directory-name\n", argv[0]);    code = -1;    return;  }  if (command("MKD %s\r\n", argv[1]) == ERROR && code == 500) {    if (verbose)      printf("MKD command not recognized, trying XMKD\n");    command("XMKD %s\r\n", argv[1]);  }}/* Remove a directory.                                                       */void removedir(int argc, char *argv[]) {  if (argc < 2 && !another(&argc, &argv, "directory-name")) {    printf("usage: %s directory-name\n", argv[0]);    code = -1;    return;  }  if (command("RMD %s\r\n", argv[1]) == ERROR && code == 500) {    if (verbose)      printf("RMD command not recognized, trying XRMD\n");    command("XRMD %s\r\n", argv[1]);  }}/* Turn argv[1..argc) into a space-separated string, then prepend initial    *//* text.  Send the result as a one-line command and get response.            */void quote1(char *initial, int argc, char **argv) {  register int i, len=0;  char buf[BUFSIZ];		/* must be >= sizeof(line) */  char *eolstr = "\r\n";  bzero(buf, BUFSIZ);  len += strlen(strncpy(buf, initial, MIN((BUFSIZ-len), strlen(initial))));  if (argc > 1) {    len += strlen(strncpy(&buf[len], argv[1], MIN((BUFSIZ-len), strlen(argv[1]))));    for (i = 2; i < argc; i++) {      buf[len++] = ' ';      len += strlen(strncpy(&buf[len], argv[i], MIN((BUFSIZ-len), strlen(argv[i]))));    }  }  len += strlen(strncpy(&buf[len], eolstr, MIN((BUFSIZ-len), strlen(eolstr))));  buf[MIN((BUFSIZ-1), len)] = '\0';  if (command(buf) == PRELIM) {    while (getreply(0) == PRELIM);  }}/* Send a line, verbatim, to the remote machine.                             */void quote(int argc, char *argv[]) {   if (argc < 2 && !another(&argc, &argv, "command line to send")) {    printf("usage: %s line-to-send\n", argv[0]);    code = -1;    return;  }  quote1("", argc, argv);}/* Send a SITE command to the remote machine.  The line                      *//* is sent verbatim to the remote machine, except that the                   *//* word "SITE" is added at the front.                                        */void site(int argc, char *argv[]) {  if (argc < 2 && !another(&argc, &argv, "arguments to SITE command")) {    printf("usage: %s line-to-send\n", argv[0]);    code = -1;    return;  }  quote1("SITE ", argc, argv);}void do_chmod(int argc, char *argv[]) {  if (argc < 2 && !another(&argc, &argv, "mode"))    goto usage;  if (argc < 3 && !another(&argc, &argv, "file-name")) {  usage:    printf("usage: %s mode file-name\n", argv[0]);    code = -1;    return;  }  command("SITE CHMOD %s %s\r\n", argv[1], argv[2]);}void do_umask(int argc, char *argv[]) {  int oldverbose = verbose;  verbose = 1;  command(argc == 1 ? "SITE UMASK\r\n" : "SITE UMASK %s\r\n", argv[1]);  verbose = oldverbose;}void idletime(int argc, char *argv[]) {  int oldverbose = verbose;  verbose = 1;  command(argc == 1 ? "SITE IDLE\r\n" : "SITE IDLE %s\r\n", argv[1]);  verbose = oldverbose;}/* Ask the other side for help.                                              */void rmthelp(int argc, char *argv[]) {  int oldverbose = verbose;  verbose = 1;  command(argc == 1 ? "HELP\r\n" : "HELP %s\r\n", argv[1]);  verbose = oldverbose;}/* Terminate session, but don't exit.                                        */void disconnect() {  extern FILE *cout;  extern int data;  if (!connected)    return;  command("QUIT\r\n");  if (cout) {    fclose(cout);  }  cout = NULL;  connected = 0;  data = -1;  if (!proxy) {    macnum = 0;  }}/* Terminate session and exit.                                               *//*                                                                           *//* VARARGS                                                                   */int quit() {  if (connected) disconnect();  pswitch(1);  if (connected) disconnect();  exit(0);  return -1;}void fatal(char *msg) {  fprintf(stderr, "ftp: %s\n", msg);  exit(1);}void account(int argc, char **argv) {  char acct[50], *GETPASS(), *ap;  if (argc > 1) {    ++argv;    --argc;    strncpy(acct,*argv,49);    acct[49] = '\0';    while (argc > 1) {      --argc;      ++argv;      strncat(acct,*argv, 49-strlen(acct));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -