]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/daemon.c
ITS#1716 is_entry_subentr/ies/y/
[openldap] / servers / slapd / daemon.c
index 6180e391b580922dbffc5a23a44be3d1fa892d41..64865406e20e91f748e91a14f5bfebd8f69ac222 100644 (file)
@@ -330,136 +330,26 @@ static int get_url_perms(
                if ( strncasecmp( type, LDAPI_MOD_URLEXT "=", sizeof(LDAPI_MOD_URLEXT "=") - 1 ) == 0 ) {
                        char    *value = type + sizeof(LDAPI_MOD_URLEXT "=") - 1;
                        mode_t  p = 0;
+                       int     j;
 
-#if 0
-                       if ( strlen( value ) != 9 ) {
-                               return LDAP_OTHER;
-                       }
-
-                       switch ( value[ 0 ] ) {
-                       case 'r':
-                               p |= S_IRUSR;
-                               break;
-                       case '-':
-                               break;
-                       default:
-                               return LDAP_OTHER;
-                       } 
-
-                       switch ( value[ 1 ] ) {
-                       case 'w':
-                               p |= S_IWUSR;
-                               break;
-                       case '-':
-                               break;
-                       default:
-                               return LDAP_OTHER;
-                       } 
-
-                       switch ( value[ 2 ] ) {
-                       case 'x':
-                               p |= S_IXUSR;
-                               break;
-                       case '-':
-                               break;
-                       default:
-                               return LDAP_OTHER;
-                       } 
-
-                       switch ( value[ 3 ] ) {
-                       case 'r':
-                               p |= S_IRGRP;
-                               break;
-                       case '-':
-                               break;
-                       default:
-                               return LDAP_OTHER;
-                       } 
-
-                       switch ( value[ 4 ] ) {
-                       case 'w':
-                               p |= S_IWGRP;
-                               break;
-                       case '-':
-                               break;
-                       default:
-                               return LDAP_OTHER;
-                       } 
-
-                       switch ( value[ 5 ] ) {
-                       case 'x':
-                               p |= S_IXGRP;
-                               break;
-                       case '-':
-                               break;
-                       default:
-                               return LDAP_OTHER;
-                       } 
-
-                       switch ( value[ 6 ] ) {
-                       case 'r':
-                               p |= S_IROTH;
-                               break;
-                       case '-':
-                               break;
-                       default:
-                               return LDAP_OTHER;
-                       } 
-
-                       switch ( value[ 7 ] ) {
-                       case 'w':
-                               p |= S_IWOTH;
-                               break;
-                       case '-':
-                               break;
-                       default:
-                               return LDAP_OTHER;
-                       } 
-
-                       switch ( value[ 8 ] ) {
-                       case 'x':
-                               p |= S_IXOTH;
-                               break;
-                       case '-':
-                               break;
-                       default:
-                               return LDAP_OTHER;
-                       } 
-#else
                        if ( strlen(value) != 3 ) {
                                return LDAP_OTHER;
                        } 
 
-                       switch ( value[ 0 ] ) {
-                       case 'w':
-                               p |= S_IRWXU;
-                               break;
-                       case '-':
-                               break;
-                       default:
-                               return LDAP_OTHER;
-                       } 
-
-                       switch ( value[ 1 ] ) {
-                       case 'w':
-                               p |= S_IRWXG;
-                               break;
-                       case '-':
-                               break;
-                       default:
-                               return LDAP_OTHER;
-                       } 
+                       for ( j = 0; j < 3; j++ ) {
+                               static mode_t   m[ 3 ] 
+                                       = { S_IRWXU, S_IRWXG, S_IRWXO };
 
-                       switch ( value[ 2 ] ) {
-                       case 'w':
-                               p |= S_IRWXO;
-                               break;
-                       case '-':
-                               break;
-                       default:
-                               return LDAP_OTHER;
+                               switch ( value[ j ] ) {
+                               case 'w':
+                                       p |= m[ j ];
+                                       break;
+                               case '-':
+                                       break;
+                               default:
+                                       return LDAP_OTHER;
+                               }
                        } 
-#endif
 
                        *crit = c;
                        *perms = p;
@@ -467,6 +357,8 @@ static int get_url_perms(
                        return LDAP_SUCCESS;
                }
        }
+
+       return LDAP_OTHER;
 }
 #endif /* LDAP_PF_LOCAL */
 
@@ -897,7 +789,7 @@ static Listener * slap_open_listener(
 #else
                s = inet_ntoa( ((struct sockaddr_in *) *sal)->sin_addr );
 #endif
-               port = ((struct sockaddr_in *)*sal) ->sin_port;
+               port = ntohs( ((struct sockaddr_in *)*sal) ->sin_port );
                l.sl_name = ch_malloc( sizeof("IP=255.255.255.255:65535") );
                sprintf( l.sl_name, "IP=%s:%d",
                         s != NULL ? s : "unknown" , port );
@@ -908,7 +800,7 @@ static Listener * slap_open_listener(
                char addr[INET6_ADDRSTRLEN];
                inet_ntop( AF_INET6, &((struct sockaddr_in6 *)*sal)->sin6_addr,
                           addr, sizeof addr);
-               port = ((struct sockaddr_in6 *)*sal)->sin6_port;
+               port = ntohs( ((struct sockaddr_in6 *)*sal)->sin6_port );
                l.sl_name = ch_malloc( strlen(addr) + sizeof("IP= 65535") );
                sprintf( l.sl_name, "IP=%s %d", addr, port );
        } break;
@@ -1529,19 +1421,21 @@ slapd_daemon_task(
 #endif
                        ) {
 #ifdef SLAPD_RLOOKUPS
+                               if ( use_reverse_lookup ) {
 #  ifdef LDAP_PF_INET6
-                               if ( from.sa_addr.sa_family == AF_INET6 )
-                                       hp = gethostbyaddr(
-                                               (char *)&(from.sa_in6_addr.sin6_addr),
-                                               sizeof(from.sa_in6_addr.sin6_addr),
-                                               AF_INET6 );
-                               else
+                                       if ( from.sa_addr.sa_family == AF_INET6 )
+                                               hp = gethostbyaddr(
+                                                       (char *)&(from.sa_in6_addr.sin6_addr),
+                                                       sizeof(from.sa_in6_addr.sin6_addr),
+                                                       AF_INET6 );
+                                       else
 #  endif /* LDAP_PF_INET6 */
-                               hp = gethostbyaddr(
-                                       (char *) &(from.sa_in_addr.sin_addr),
-                                       sizeof(from.sa_in_addr.sin_addr),
-                                       AF_INET );
-                               dnsname = hp ? ldap_pvt_str2lower( hp->h_name ) : NULL;
+                                       hp = gethostbyaddr(
+                                               (char *) &(from.sa_in_addr.sin_addr),
+                                               sizeof(from.sa_in_addr.sin_addr),
+                                               AF_INET );
+                                       dnsname = hp ? ldap_pvt_str2lower( hp->h_name ) : NULL;
+                               }
 #else
                                dnsname = NULL;
 #endif /* SLAPD_RLOOKUPS */