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

📄 ez-ipupdate.c

📁 Connect DDNS Client Use GNUDIP
💻 C
📖 第 1 页 / 共 5 页
字号:
          // get time and reason          if(strlen(p) >= 2)          {            sscanf(p, "%d%c %255[^\r\n]", &howlong, &mult, reason);            if(mult == 'h')            {              howlong *= 3600;            }            else if(mult == 'm')            {              howlong *= 60;            }            if(howlong > MAX_WAITRESPONSE_WAIT)            {              howlong = MAX_WAITRESPONSE_WAIT;            };          }          else          {            sprintf(reason, "problem parsing reason for wait response");          }          show_message("Wait response received, waiting for %d seconds before next update.\n", howlong);          show_message("Wait response reason: %d\n", N_STR(reason));          sleep(howlong);          retval = UPDATERES_ERROR;        }        else        {          show_message("error processing request\n");          if(!(options & OPT_QUIET))          {            fprintf(stderr, "==== server output: ====\n%s\n", buf);          }          retval = UPDATERES_ERROR;        }      }      break;    case 401:      if(!(options & OPT_QUIET))      {        show_message("authentication failure\n");      }      retval = UPDATERES_SHUTDOWN;      break;    default:      if(!(options & OPT_QUIET))      {        // reuse the auth buffer        *auth = '\0';        sscanf(buf, " HTTP/1.%*c %*3d %255[^\r\n]", auth);        show_message("unknown return code: %d\n", ret);        fprintf(stderr, "server response: %s\n", auth);      }      retval = UPDATERES_ERROR;      break;  }  return(retval);}int PGPOW_check_info(void){  char buf[BUFSIZ+1];  if((host == NULL) || (*host == '\0'))  {    if(options & OPT_DAEMON)    {      return(-1);    }    if(host) { free(host); }    printf("host: ");    *buf = '\0';    fgets(buf, BUFSIZ, stdin);    host = strdup(buf);    chomp(host);  }  if(interface == NULL && address == NULL)  {    if(options & OPT_DAEMON)    {      fprintf(stderr, "you must provide either an interface or an address\n");      return(-1);    }    if(interface) { free(interface); }    printf("interface: ");    *buf = '\0';    fgets(buf, BUFSIZ, stdin);    chomp(buf);    option_handler(CMD_interface, buf);  }  warn_fields(service->fields_used);  return 0;}int PGPOW_update_entry(void){  char buf[BUFFER_SIZE+1];  buf[BUFFER_SIZE] = '\0';  if(do_connect((int*)&client_sockfd, server, port) != 0)  {    if(!(options & OPT_QUIET))    {      show_message("error connecting to %s:%s\n", server, port);    }    return(UPDATERES_ERROR);  }  /* read server message */  if(PGPOW_read_response(buf) != 0)  {    show_message("strange server response, are you connecting to the right server?\n");    close(client_sockfd);    return(UPDATERES_ERROR);  }  /* send version command */  snprintf(buf, BUFFER_SIZE, "VER %s [%s-%s %s (%s)]\015\012", PGPOW_VERSION,      "ez-update", VERSION, OS, "by Angus Mackay");  output(buf);  if(PGPOW_read_response(buf) != 0)  {    if(strncmp("ERR", buf, 3) == 0)    {      show_message("error talking to server: %s\n", &(buf[3]));    }    else    {      show_message("error talking to server:\n\t%s\n", buf);    }    close(client_sockfd);    return(UPDATERES_ERROR);  }  /* send user command */  snprintf(buf, BUFFER_SIZE, "USER %s\015\012", user_name);  output(buf);  if(PGPOW_read_response(buf) != 0)  {    if(strncmp("ERR", buf, 3) == 0)    {      show_message("error talking to server: %s\n", &(buf[3]));    }    else    {      show_message("error talking to server:\n\t%s\n", buf);    }    close(client_sockfd);    return(UPDATERES_ERROR);  }  /* send pass command */  snprintf(buf, BUFFER_SIZE, "PASS %s\015\012", password);  output(buf);  if(PGPOW_read_response(buf) != 0)  {    if(strncmp("ERR", buf, 3) == 0)    {      show_message("error talking to server: %s\n", &(buf[3]));    }    else    {      show_message("error talking to server:\n\t%s\n", buf);    }    close(client_sockfd);    return(UPDATERES_ERROR);  }  /* send host command */  snprintf(buf, BUFFER_SIZE, "HOST %s\015\012", host);  output(buf);  if(PGPOW_read_response(buf) != 0)  {    if(strncmp("ERR", buf, 3) == 0)    {      show_message("error talking to server: %s\n", &(buf[3]));    }    else    {      show_message("error talking to server:\n\t%s\n", buf);    }    close(client_sockfd);    return(UPDATERES_ERROR);  }  /* send oper command */  snprintf(buf, BUFFER_SIZE, "OPER %s\015\012", request);  output(buf);  if(PGPOW_read_response(buf) != 0)  {    if(strncmp("ERR", buf, 3) == 0)    {      show_message("error talking to server: %s\n", &(buf[3]));    }    else    {      show_message("error talking to server:\n\t%s\n", buf);    }    close(client_sockfd);    return(UPDATERES_ERROR);  }  if(strcmp("update", request) == 0)  {    /* send ip command */    snprintf(buf, BUFFER_SIZE, "IP %s\015\012", address);    output(buf);    if(PGPOW_read_response(buf) != 0)    {      if(strncmp("ERR", buf, 3) == 0)      {        show_message("error talking to server: %s\n", &(buf[3]));      }      else      {        show_message("error talking to server:\n\t%s\n", buf);      }      close(client_sockfd);      return(UPDATERES_ERROR);    }  }  /* send done command */  snprintf(buf, BUFFER_SIZE, "DONE\015\012");  output(buf);  if(PGPOW_read_response(buf) != 0)  {    if(strncmp("ERR", buf, 3) == 0)    {      show_message("error talking to server: %s\n", &(buf[3]));    }    else    {      show_message("error talking to server:\n\t%s\n", buf);    }    close(client_sockfd);    return(UPDATERES_ERROR);  }  if(!(options & OPT_QUIET))  {    printf("request successful\n");  }  close(client_sockfd);  return(UPDATERES_OK);}int DHS_check_info(void){  char buf[BUFSIZ+1];  if((host == NULL) || (*host == '\0'))  {    if(options & OPT_DAEMON)    {      return(-1);    }    if(host) { free(host); }    printf("host: ");    fgets(buf, BUFSIZ, stdin);    host = strdup(buf);    chomp(host);  }  if(interface == NULL && address == NULL)  {    if(options & OPT_DAEMON)    {      fprintf(stderr, "you must provide either an interface or an address\n");      return(-1);    }    if(interface) { free(interface); }    printf("interface: ");    *buf = '\0';    fgets(buf, BUFSIZ, stdin);    chomp(buf);    option_handler(CMD_interface, buf);  }  warn_fields(service->fields_used);  return 0;}/* * grrrrr, it seems that dhs.org requires us to use POST * also DHS doesn't update both the mx record and the address at the same * time, this service really stinks. go with justlinix.com (penguinpowered) * instead, the only advantage is short host names. */int DHS_update_entry(void){  char buf[BUFFER_SIZE+1];  char putbuf[BUFFER_SIZE+1];  char *bp = buf;  int bytes;  int btot;  int ret;  char *domain = NULL;  char *hostname = NULL;  char *p;  int limit;  int retval = UPDATERES_OK;  buf[BUFFER_SIZE] = '\0';  putbuf[BUFFER_SIZE] = '\0';  /* parse apart the domain and hostname */  hostname = strdup(host);  if((p=strchr(hostname, '.')) == NULL)  {    if(!(options & OPT_QUIET))    {      show_message("error parsing hostname from host %s\n", host);    }    return(UPDATERES_ERROR);  }  *p = '\0';  p++;  if(*p == '\0')  {    if(!(options & OPT_QUIET))    {      show_message("error parsing domain from host %s\n", host);    }    return(UPDATERES_ERROR);  }  domain = strdup(p);  dprintf((stderr, "hostname: %s, domain: %s\n", hostname, domain));  if(do_connect((int*)&client_sockfd, server, port) != 0)  {    if(!(options & OPT_QUIET))    {      show_message("error connecting to %s:%s\n", server, port);    }    return(UPDATERES_ERROR);  }  snprintf(buf, BUFFER_SIZE, "POST %s HTTP/1.0\015\012", request);  output(buf);  snprintf(buf, BUFFER_SIZE, "Authorization: Basic %s\015\012", auth);  output(buf);  snprintf(buf, BUFFER_SIZE, "User-Agent: %s-%s %s [%s] (%s)\015\012",       "ez-update", VERSION, OS, (options & OPT_DAEMON) ? "daemon" : "", "by Angus Mackay");  output(buf);  snprintf(buf, BUFFER_SIZE, "Host: %s\015\012", server);  output(buf);  p = putbuf;  *p = '\0';  limit = BUFFER_SIZE - 1 - strlen(buf);  snprintf(p, limit, "hostscmd=edit&hostscmdstage=2&type=4&");  p += strlen(p);  limit = BUFFER_SIZE - 1 - strlen(buf);  snprintf(p, limit, "%s=%s&", "updatetype", "Online");  p += strlen(p);  limit = BUFFER_SIZE - 1 - strlen(buf);  snprintf(p, limit, "%s=%s&", "ip", address);  p += strlen(p);  limit = BUFFER_SIZE - 1 - strlen(buf);  snprintf(p, limit, "%s=%s&", "mx", mx);  p += strlen(p);  limit = BUFFER_SIZE - 1 - strlen(buf);  snprintf(p, limit, "%s=%s&", "offline_url", url);  p += strlen(p);  limit = BUFFER_SIZE - 1 - strlen(buf);  if(cloak_title)  {    snprintf(p, limit, "%s=%s&", "cloak", "Y");    p += strlen(p);    limit = BUFFER_SIZE - 1 - strlen(buf);    snprintf(p, limit, "%s=%s&", "cloak_title", cloak_title);    p += strlen(p);    limit = BUFFER_SIZE - 1 - strlen(buf);  }  else  {    snprintf(p, limit, "%s=%s&", "cloak_title", "");    p += strlen(p);    limit = BUFFER_SIZE - 1 - strlen(buf);  }  snprintf(p, limit, "%s=%s&", "submit", "Update");  p += strlen(p);  limit = BUFFER_SIZE - 1 - strlen(buf);  snprintf(p, limit, "%s=%s&", "domain", domain);  p += strlen(p);  limit = BUFFER_SIZE - 1 - strlen(buf);  snprintf(p, limit, "%s=%s", "hostname", hostname);  p += strlen(p);  limit = BUFFER_SIZE - 1 - strlen(buf);  snprintf(buf, BUFFER_SIZE, "Content-length: %d\015\012", strlen(putbuf));  output(buf);  snprintf(buf, BUFFER_SIZE, "\015\012");  output(buf);  output(putbuf);  snprintf(buf, BUFFER_SIZE, "\015\012");  output(buf);  bp = buf;  bytes = 0;  btot = 0;  while((bytes=read_input(bp, BUFFER_SIZE-btot)) > 0)  {    bp += bytes;    btot += bytes;    dprintf((stderr, "btot: %d\n", btot));  }  close(client_sockfd);  buf[btot] = '\0';  dprintf((stderr, "server output: %s\n", buf));  if(sscanf(buf, " HTTP/1.%*c %3d", &ret) != 1)  {    ret = -1;  }  switch(ret)  {    case -1:      if(!(options & OPT_QUIET))      {        show_message("strange server response, are you connecting to the right server?\n");      }      retval = UPDATERES_ERROR;      break;    case 200:      if(!(options & OPT_QUIET))      {        printf("request successful\n");      }      break;    case 401:      if(!(options & OPT_QUIET))      {        show_message("authentication failure\n");      }      retval = UPDATERES_SHUTDOWN;      break;    default:      if(!(options & OPT_QUIET))      {        // reuse the auth buffer        *auth = '\0';        sscanf(buf, " HTTP/1.%*c %*3d %255[^\r\n]", auth);        show_message("unknown return code: %d\n", ret);        show_message("server response: %s\n", auth);      }      retval = UPDATERES_ERROR;      break;  }  // this stupid service requires us to do seperate request if we want to   // update the mail exchanger (mx). grrrrrr  if(*mx != '\0')  {    // okay, dhs's service is incredibly stupid and will not work with two    // requests right after each other. I could care less that this is ugly,    // I personally will NEVER use dhs, it is laughable.    sleep(DHS_SUCKY_TIMEOUT < timeout.tv_sec ? DHS_SUCKY_TIMEOUT : timeout.tv_sec);    if(do_connect((int*)&client_sockfd, server, port) != 0)    {      if(!(options & OPT_QUIET))      {        show_message("error connecting to %s:%s\n", server, port);      }      return(UPDATERES_ERROR);    }    snprintf(buf, BUFFER_SIZE, "POST %s HTTP/1.0\015\012", request);    output(buf);    snprintf(buf, BUFFER_SIZE, "Authorization: Basic %s\015\012", auth);    output(buf);    snprintf(buf, BUFFER_SIZE, "User-Agent: %s-%s %s [%s] (%s)\015\012",         "ez-update", VERSION, OS, (options & OPT_DAEMON) ? "daemon" : "", "by Angus Mackay");    output(buf);    snprintf(buf, BUFFER_SIZE, "Host: %s\015\012", server);    output(buf);    p = putbuf;    *p = '\0';    limit = BUFFER_SIZE - 1 - strlen(buf);    snprintf(p, limit, "hostscmd=edit&hostscmdstage=2&

⌨️ 快捷键说明

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