Changeset 27 for trunk/src


Ignore:
Timestamp:
Apr 6, 2006, 8:55:51 PM (18 years ago)
Author:
rainer
Message:

Support for server-to-server relay and more user policies

Location:
trunk/src
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/sh_database.c

    r22 r27  
    11921192        }
    11931193    }
    1194 #if 0
    1195   /* apparently slower, see gyule.7 */
    1196   len = (long) strlen(val);
    1197 
    1198   if ((val[0] != '\0') && (*size > 2))
    1199     {
    1200       if (flag == 1)
    1201         {
    1202           *end = ',';  ++end;
    1203           *end = '\''; ++end; (*size) -= 2;
    1204           *end = '\0';
    1205        
    1206           if ((long) *size > (len+2))
    1207             {
    1208               (void) sl_strlcat(end, val, (size_t) *size);
    1209               end   += len; (*size) -= len;
    1210               *end = '\''; ++end;  (*size) -= 1;
    1211             }
    1212           *end = '\0';
    1213         }
    1214       else
    1215         {
    1216           *end = ',';  ++end; (*size) -= 1;
    1217           *end = '\0';
    1218        
    1219           if ((long) *size > (len+1))
    1220             {
    1221               (void) sl_strlcat(end, val, (size_t) *size);
    1222               end   += len; (*size) -= len;
    1223             }
    1224           *end = '\0';
    1225         }
    1226     }
    1227 #endif
     1194
    12281195  return end;
    12291196}
     
    16951662}
    16961663
     1664/* recursively enter linked list of messages into database, last first
     1665 */
     1666int sh_database_insert_rec (dbins * curr, unsigned int depth)
     1667{
     1668  long    id = 0;
     1669  dbins * prev;
     1670
     1671  SL_ENTER(_("sh_database_insert_rec"));
     1672
     1673  if (curr->next)
     1674    {
     1675      prev = curr->next;
     1676      sl_strlcpy(prev->host, curr->host, 64);
     1677      id = sh_database_insert_rec (curr->next, (depth + 1));
     1678    }
     1679
     1680  if (id != 0)                       /* this is a server wrapper          */
     1681    {
     1682      if (enter_wrapper != 0)
     1683        {
     1684          id = sh_database_entry (curr, id);
     1685        }
     1686    }
     1687  else
     1688    {
     1689      /*
     1690       * id = -1 is the client message; log_ref will be NULL
     1691       */
     1692      if (depth > 0)                  /* this is a client message         */
     1693        id = sh_database_entry (curr, -1);
     1694      else                            /* this is a generic server message */
     1695        id = sh_database_entry (curr, 0);
     1696    }
     1697
     1698  SH_FREE(curr);
     1699
     1700  SL_RETURN(id, _("sh_database_insert"));
     1701}
     1702
    16971703int sh_database_insert (char * message)
    16981704{
    16991705  dbins * db_entry;
    1700   dbins * prev;
    1701   dbins * curr;
    1702   long    id = 0;
    1703 #ifdef HOST_SWITCH
    1704   char  * temp[64];
    1705 #endif
    17061706
    17071707  SL_ENTER(_("sh_database_insert"));
     
    17141714  (void) sh_database_parse (message, db_entry);
    17151715
    1716   /* Enter the list into the database. Actually, the list can only have
    1717    * two entries at most.
    1718    */
    1719   curr = db_entry;
    1720   if (curr->next)
    1721     {
    1722       prev = curr->next;
    1723 #ifdef HOST_SWITCH
    1724       strncpy(temp, prev->host,       64);
     1716  /* recursively enter the linked list into the database
     1717   */
     1718  (void) sh_database_insert_rec (db_entry, 0);
     1719
     1720  SL_RETURN(0, _("sh_database_insert"));
     1721}
     1722
    17251723#endif
    1726       strncpy(prev->host, curr->host, 64);
    1727 #ifdef HOST_SWITCH
    1728       strncpy(curr->host, temp,       64);
    1729 #endif
    1730       id = sh_database_entry (prev, -1);
    1731       SH_FREE(prev);
    1732     }
    1733 
    1734   if (id != 0)                       /* this is a server wrapper          */
    1735     {
    1736       if (enter_wrapper != 0)
    1737         (void) sh_database_entry (curr, id);
    1738     }
    1739   else                                /* this is a generic server message */
    1740     {
    1741       (void) sh_database_entry (curr, 0);
    1742     }
    1743   SH_FREE(curr);
    1744 
    1745   SL_RETURN(0, _("sh_database_insert"));
    1746 }
    1747 
    1748 #endif
  • trunk/src/sh_error.c

    r22 r27  
    639639}
    640640
    641 #ifdef SH_WITH_CLIENT
     641#if defined(SH_WITH_CLIENT) || defined(SH_WITH_SERVER)
    642642/* set severity for TCP export
    643643 */
     
    843843#endif
    844844
    845 #ifdef SH_WITH_CLIENT
     845#if defined(SH_WITH_CLIENT) || defined(SH_WITH_SERVER)
    846846  char   * ex_msg;
    847847#endif
     
    862862  static int syslog_block = 0;
    863863  static int log_block    = 0;
    864 #if defined(SH_WITH_CLIENT)
     864#if defined(SH_WITH_CLIENT) || defined(SH_WITH_SERVER)
    865865  static int export_block = 0;
    866866#endif
     
    926926    severity = sev;
    927927
     928  /* these are messages from remote sources
     929   */
    928930  if ((severity  & SH_ERR_INET) != 0)
    929931    {
     
    939941       ( (errFlags.sysloglevel  & severity    ) == 0 ||
    940942         (errFlags.syslog_class & (1 << class)) == 0 )     &&
    941 #ifdef SH_WITH_CLIENT
     943#if defined(SH_WITH_CLIENT) || defined(SH_WITH_CLIENT)
    942944       ( (errFlags.exportlevel  & severity    ) == 0 ||
    943945         (errFlags.export_class & (1 << class)) == 0 )     &&
     
    958960         (errFlags.mail_class    & (1 << class)) == 0 )
    959961#ifdef SH_WITH_SERVER
    960       && (flag_inet == S_FALSE)
     962       && (flag_inet == S_FALSE) /* still log messages from remote sources */
    961963#endif
    962964       )
     
    11191121       * to log server
    11201122       ****************************************************/
    1121 #ifdef SH_WITH_CLIENT
     1123#if defined(SH_WITH_CLIENT) || defined(SH_WITH_SERVER)
    11221124      /* Export by TCP.
    11231125       */
    1124       if ((errFlags.exportlevel  & severity  )   != 0 &&
    1125           (errFlags.export_class & (1 << class)) != 0 &&
    1126           (errFlags.exportlevel  & SH_ERR_NOT)   == 0 &&
    1127           class != AUD                                &&
    1128           sh.flag.isserver != GOOD                    &&
    1129           (flag_inet == S_FALSE) ) /* don't log inet to export */
     1126
     1127      if ( ((errFlags.exportlevel  & severity  )   != 0 &&
     1128            (errFlags.export_class & (1 << class)) != 0 &&
     1129            (errFlags.exportlevel  & SH_ERR_NOT)   == 0 &&
     1130            class != AUD                               )
     1131#ifdef SH_WITH_SERVER
     1132           || (flag_inet == S_TRUE) /* always log inet to export */
     1133#endif
     1134          /* sh.flag.isserver != GOOD                    && */
     1135          /* (flag_inet == S_FALSE) */ /* don't log inet to export */
     1136           )
    11301137        {
    11311138          if (export_block == 0)
     
    11421149              sl_snprintf(ex_msg, ex_len, _("%d?%u?%s"),
    11431150                      severity, class, lmsg->msg);
    1144 
    11451151              retval = sh_forward (ex_msg);
    11461152              SH_FREE(ex_msg);
  • trunk/src/sh_files.c

    r22 r27  
    454454}
    455455
    456 
    457456int sh_files_pushfile_user1 (const char * str_s)
    458457{
    459458  return (sh_files_pushfile (SH_LEVEL_USER1, str_s));
     459}
     460
     461int sh_files_pushfile_user2 (const char * str_s)
     462{
     463  return (sh_files_pushfile (SH_LEVEL_USER2, str_s));
     464}
     465
     466int sh_files_pushfile_user3 (const char * str_s)
     467{
     468  return (sh_files_pushfile (SH_LEVEL_USER3, str_s));
     469}
     470
     471int sh_files_pushfile_user4 (const char * str_s)
     472{
     473  return (sh_files_pushfile (SH_LEVEL_USER4, str_s));
    460474}
    461475
     
    612626  return (sh_files_parse_mask(&mask_USER1, str));
    613627}
     628int sh_files_redef_user2(const char * str)
     629{
     630  return (sh_files_parse_mask(&mask_USER2, str));
     631}
     632int sh_files_redef_user3(const char * str)
     633{
     634  return (sh_files_parse_mask(&mask_USER3, str));
     635}
     636int sh_files_redef_user4(const char * str)
     637{
     638  return (sh_files_parse_mask(&mask_USER4, str));
     639}
    614640int sh_files_redef_readonly(const char * str)
    615641{
     
    657683    case SH_LEVEL_USER1:
    658684      return (unsigned long) mask_USER1;
     685    case SH_LEVEL_USER2:
     686      return (unsigned long) mask_USER2;
     687    case SH_LEVEL_USER3:
     688      return (unsigned long) mask_USER3;
     689    case SH_LEVEL_USER4:
     690      return (unsigned long) mask_USER4;
    659691    case SH_LEVEL_PRELINK:
    660692      return (unsigned long) mask_PRELINK;
     
    10421074{
    10431075  return (sh_files_pushdir (SH_LEVEL_USER1, str_s));
     1076}
     1077
     1078int sh_files_pushdir_user2 (const char * str_s)
     1079{
     1080  return (sh_files_pushdir (SH_LEVEL_USER2, str_s));
     1081}
     1082
     1083int sh_files_pushdir_user3 (const char * str_s)
     1084{
     1085  return (sh_files_pushdir (SH_LEVEL_USER3, str_s));
     1086}
     1087
     1088int sh_files_pushdir_user4 (const char * str_s)
     1089{
     1090  return (sh_files_pushdir (SH_LEVEL_USER4, str_s));
    10441091}
    10451092
  • trunk/src/sh_forward.c

    r22 r27  
    335335#endif
    336336
    337 #ifdef SH_WITH_CLIENT
     337#if defined(SH_WITH_CLIENT) || defined(SH_WITH_SERVER)
    338338
    339339static int count_dev_server = 0;
     
    708708static long sh_forward_try (char * errmsg);
    709709
     710static unsigned int ServerPort = SH_DEFAULT_PORT;
     711
     712int sh_forward_server_port (const char * str)
     713{
     714  unsigned long l;
     715  char * endptr;
     716
     717  SL_ENTER(_("sh_forward_server_port"));
     718
     719  l = strtoul (str, &endptr, 0);
     720  if (l > 65535 || endptr == str)
     721    {
     722      SL_RETURN (-1, _("sh_forward_server_port"));
     723    }
     724  ServerPort = (unsigned int) l;
     725  SL_RETURN (0, _("sh_forward_server_port"));
     726}
    710727
    711728long sh_forward (char * errmsg)
     
    880897
    881898  sockfd = connect_port_2 (sh.srvexport.name, sh.srvexport.alt,
    882                            SH_DEFAULT_PORT,
     899                           ServerPort,
    883900                           error_call, &error_num, error_msg, 256);
    884901
     
    14411458                                                flag_err,
    14421459                                                MSG_TCP_NOCONF);
    1443                               } else {
     1460                              }
     1461#ifdef SH_WITH_CLIENT
     1462                              else {
    14441463                                sh_socket_server_cmd(buffer);
    14451464                              }
     1465#endif
    14461466                              flag_err = 0;
    14471467
  • trunk/src/sh_getopt.c

    r22 r27  
    8080    sh_util_set_interactive },
    8181#endif
     82#if defined(SH_WITH_SERVER) || defined(SH_WITH_CLIENT)
     83  { N_("server-port"), 
     84    '-',
     85    N_("Set the server port to connect to"), 
     86    HAS_ARG_YES,
     87    sh_forward_server_port },
     88#endif
    8289#ifdef SH_WITH_SERVER
    8390  { N_("server"), 
     
    112119    HAS_ARG_YES,
    113120    sh_calls_set_bind_addr },
    114 #ifdef SH_WITH_CLIENT
     121#if defined(SH_WITH_SERVER) || defined(SH_WITH_CLIENT)
    115122  { N_("set-export-severity"), 
    116123    'e',
     
    554561          for (i = 0; op_table[i].longopt != NULL; ++i)
    555562            {
    556      
     563
    557564              if (sl_strncmp(_(op_table[i].longopt),
    558565                             &argv[1][2],
     
    562569                  if ( op_table[i].hasArg == HAS_ARG_YES )
    563570                    {
    564                       if ( (theequal = strchr(argv[1], '=')) == NULL)
     571                      theequal = strchr(argv[1], '=');
     572                      if (theequal == NULL)
    565573                        {
    566574                          if (argc < 3)
  • trunk/src/sh_hash.c

    r22 r27  
    297297    N_("[User0]"),
    298298    N_("[User1]"),
     299    N_("[User2]"),
     300    N_("[User3]"),
     301    N_("[User4]"),
    299302    N_("[Prelink]"),
    300303    NULL
  • trunk/src/sh_readconf.c

    r22 r27  
    6969  SH_SECTION_USER0,
    7070  SH_SECTION_USER1,
     71  SH_SECTION_USER2,
     72  SH_SECTION_USER3,
     73  SH_SECTION_USER4,
    7174  SH_SECTION_PRELINK,
    7275#if defined (SH_WITH_MAIL)
     
    108111  { N_("[User0]"),            SH_SECTION_USER0},
    109112  { N_("[User1]"),            SH_SECTION_USER1},
     113  { N_("[User2]"),            SH_SECTION_USER2},
     114  { N_("[User3]"),            SH_SECTION_USER3},
     115  { N_("[User4]"),            SH_SECTION_USER4},
    110116  { N_("[Prelink]"),          SH_SECTION_PRELINK},
    111117#ifdef WITH_EXTERNAL
     
    820826  { N_("file"),           SH_SECTION_USER1,      SH_SECTION_NONE,
    821827    sh_files_pushfile_user1 },
     828  { N_("dir"),            SH_SECTION_USER2,      SH_SECTION_NONE,
     829    sh_files_pushdir_user2 },
     830  { N_("file"),           SH_SECTION_USER2,      SH_SECTION_NONE,
     831    sh_files_pushfile_user2 },
     832  { N_("dir"),            SH_SECTION_USER3,      SH_SECTION_NONE,
     833    sh_files_pushdir_user3 },
     834  { N_("file"),           SH_SECTION_USER3,      SH_SECTION_NONE,
     835    sh_files_pushfile_user3 },
     836  { N_("dir"),            SH_SECTION_USER4,      SH_SECTION_NONE,
     837    sh_files_pushdir_user4 },
     838  { N_("file"),           SH_SECTION_USER4,      SH_SECTION_NONE,
     839    sh_files_pushfile_user4 },
    822840  { N_("dir"),            SH_SECTION_PRELINK,    SH_SECTION_NONE,
    823841    sh_files_pushdir_prelink },
     
    892910  { N_("redefuser1"),           SH_SECTION_MISC,   SH_SECTION_NONE,
    893911    sh_files_redef_user1 },
     912
     913  { N_("redefuser2"),           SH_SECTION_MISC,   SH_SECTION_NONE,
     914    sh_files_redef_user2 },
     915
     916  { N_("redefuser3"),           SH_SECTION_MISC,   SH_SECTION_NONE,
     917    sh_files_redef_user3 },
     918
     919  { N_("redefuser4"),           SH_SECTION_MISC,   SH_SECTION_NONE,
     920    sh_files_redef_user4 },
    894921
    895922  { N_("redefprelink"),         SH_SECTION_MISC,   SH_SECTION_NONE,
     
    941968#endif
    942969
    943 #ifdef SH_WITH_CLIENT
     970#if defined(SH_WITH_CLIENT) || defined(SH_WITH_SERVER)
    944971  { N_("exportseverity"),      SH_SECTION_LOG,  SH_SECTION_NONE,
    945972    sh_error_setexport },
    946973  { N_("exportclass"),         SH_SECTION_LOG,  SH_SECTION_NONE,
    947974    sh_error_export_mask },
     975#if defined(SH_WITH_SERVER)
     976  { N_("setlogserver"),        SH_SECTION_SRV,  SH_SECTION_MISC,
     977    sh_forward_setlogserver },
     978#else
    948979  { N_("setlogserver"),        SH_SECTION_CLT,  SH_SECTION_MISC,
    949980    sh_forward_setlogserver },
     981#endif
    950982#endif
    951983  { N_("setfilechecktime"),  SH_SECTION_MISC,   SH_SECTION_NONE,
     
    10881120    N_("severityuser0"),
    10891121    N_("severityuser1"),
     1122    N_("severityuser2"),
     1123    N_("severityuser3"),
     1124    N_("severityuser4"),
    10901125    N_("severityprelink"),
    10911126    NULL
     
    11041139    SH_ERR_T_USER0,       
    11051140    SH_ERR_T_USER1,       
     1141    SH_ERR_T_USER2,       
     1142    SH_ERR_T_USER3,       
     1143    SH_ERR_T_USER4,       
    11061144    SH_ERR_T_PRELINK,       
    11071145  };
  • trunk/src/sh_srp.c

    r22 r27  
    384384}
    385385
    386 #ifdef SH_WITH_CLIENT
     386#if defined(SH_WITH_CLIENT) || defined(SH_WITH_SERVER)
    387387 
    388388
     
    489489 
    490490 
    491 #ifdef SH_WITH_CLIENT
     491#if defined(SH_WITH_CLIENT) || defined(SH_WITH_SERVER)
    492492 
    493493char * sh_srp_S_c (char * u_str, char * B_str)
  • trunk/src/sh_tools.c

    r22 r27  
    695695}
    696696
    697 #if defined(HAVE_NTIME) || defined(SH_WITH_CLIENT)
     697#if defined(HAVE_NTIME) || defined(SH_WITH_CLIENT) || defined(SH_WITH_SERVER)
    698698static
    699699int sh_write_select(int type, int sockfd,
     
    842842#endif
    843843
    844 #if defined (SH_WITH_CLIENT)
     844#if defined (SH_WITH_CLIENT) || defined(SH_WITH_SERVER)
    845845unsigned long write_port (int sockfd, char *buf, unsigned long nbytes,
    846846                          int * w_error, int timeout)
     
    862862#endif
    863863
    864 #if defined(HAVE_NTIME) || defined(SH_WITH_CLIENT)
     864#if defined(HAVE_NTIME) || defined(SH_WITH_CLIENT) || defined(SH_WITH_SERVER)
    865865
    866866unsigned long read_port (int sockfd, char *buf, unsigned long nbytes,
     
    898898#endif
    899899
    900 #if defined (SH_WITH_CLIENT)
     900#if defined (SH_WITH_CLIENT) || defined(SH_WITH_SERVER)
    901901
    902902int check_request (char * have, char * need)
     
    952952#endif
    953953
    954 #if defined (SH_WITH_CLIENT)
     954#if defined (SH_WITH_CLIENT) || defined (SH_WITH_SERVER)
    955955
    956956void get_header (unsigned char * head, unsigned long * bytes, char * u)
     
    10321032 * (msg_size = payload_size - key_len = payload_size - 48)
    10331033 */
     1034
     1035/*
     1036 * only SH_V2_FULLSIZE is used, and only once
     1037 */
     1038#if 0
    10341039#ifdef SH_WITH_SERVER
    10351040#define SH_V2_FULLSIZE  240
     
    10411046#define SH_V2_MESSAGE   960
    10421047#endif
     1048#endif
     1049#define SH_V2_FULLSIZE 1024
    10431050
    10441051#ifdef SH_ENCRYPT
     
    13831390#endif
    13841391
    1385 #if defined (SH_WITH_CLIENT)
     1392#if defined(SH_WITH_CLIENT) || defined(SH_WITH_SERVER)
    13861393
    13871394/* verify the checksum of a buffer; checksum comes first
     
    15351542#endif
    15361543
    1537 #if defined(SH_WITH_CLIENT) || defined(SH_STEALTH) || defined(WITH_GPG) || defined(WITH_PGP)
     1544#if defined(SH_WITH_CLIENT) || defined(SH_WITH_SERVER) || defined(SH_STEALTH) || defined(WITH_GPG) || defined(WITH_PGP)
    15381545
    15391546/* --------- secure temporary file ------------ */
  • trunk/src/sh_unix.c

    r25 r27  
    127127unsigned long mask_USER0        = MASK_USER_;
    128128unsigned long mask_USER1        = MASK_USER_;
     129unsigned long mask_USER2        = MASK_USER_;
     130unsigned long mask_USER3        = MASK_USER_;
     131unsigned long mask_USER4        = MASK_USER_;
    129132unsigned long mask_ALLIGNORE    = MASK_ALLIGNORE_;
    130133unsigned long mask_ATTRIBUTES   = MASK_ATTRIBUTES_;
     
    142145  mask_USER0        = MASK_USER_;
    143146  mask_USER1        = MASK_USER_;
     147  mask_USER2        = MASK_USER_;
     148  mask_USER3        = MASK_USER_;
     149  mask_USER4        = MASK_USER_;
    144150  mask_ALLIGNORE    = MASK_ALLIGNORE_;
    145151  mask_ATTRIBUTES   = MASK_ATTRIBUTES_;
  • trunk/src/sh_userfiles.c

    r1 r27  
    221221    else if ( strstr(s, "user0")     != NULL ) new->level = SH_LEVEL_USER0;
    222222    else if ( strstr(s, "user1")     != NULL ) new->level = SH_LEVEL_USER1;
     223    else if ( strstr(s, "user2")     != NULL ) new->level = SH_LEVEL_USER2;
     224    else if ( strstr(s, "user3")     != NULL ) new->level = SH_LEVEL_USER3;
     225    else if ( strstr(s, "user4")     != NULL ) new->level = SH_LEVEL_USER4;
    223226    else if ( strstr(s, "prelink")   != NULL ) new->level = SH_LEVEL_PRELINK;
    224227    else            /* The default */          new->level = default_level;
     
    332335                    (void) sh_files_pushfile_user1(filepath);
    333336                    break;
     337                case SH_LEVEL_USER2:
     338                    (void) sh_files_pushfile_user2(filepath);
     339                    break;
     340                case SH_LEVEL_USER3:
     341                    (void) sh_files_pushfile_user3(filepath);
     342                    break;
     343                case SH_LEVEL_USER4:
     344                    (void) sh_files_pushfile_user4(filepath);
     345                    break;
    334346                case SH_LEVEL_PRELINK:
    335347                    (void) sh_files_pushfile_prelink(filepath);
Note: See TracChangeset for help on using the changeset viewer.