From 3_0:
authorVolker Lendecke <vlendec@samba.org>
Fri, 7 Nov 2003 10:12:43 +0000 (10:12 +0000)
committerVolker Lendecke <vlendec@samba.org>
Fri, 7 Nov 2003 10:12:43 +0000 (10:12 +0000)
Implement %i-Macro for the locally used IP address. With this you can again
have virtual hosts with different configurations on a single smbd even on port
445.

Volker

source/lib/substitute.c
source/lib/util_sock.c

index 923afd989f7f5b939e5c9652998b7f4ecfb5b873..ee342964d0ff9f1475c78f6834bac4fdcb7cde30 100644 (file)
@@ -363,6 +363,9 @@ void standard_sub_basic(const char *smb_name, char *str,size_t len)
                case 'I' :
                        string_sub(p,"%I", client_addr(),l);
                        break;
+               case 'i' :
+                       string_sub(p,"%i", client_socket_addr(),l);
+                       break;
                case 'L' : 
                        if (local_machine_name && *local_machine_name)
                                string_sub(p,"%L", local_machine_name,l); 
index bdd167b04dd464aadb321deba3520fbbcc0f09c7..1d62da53c5bf484199d9bf6b120886e405e96d42 100644 (file)
@@ -802,6 +802,11 @@ char *client_addr(void)
        return get_peer_addr(client_fd);
 }
 
+char *client_socket_addr(void)
+{
+       return get_socket_addr(client_fd);
+}
+
 struct in_addr *client_inaddr(struct sockaddr *sa)
 {
        struct sockaddr_in *sockin = (struct sockaddr_in *) (sa);
@@ -941,6 +946,29 @@ char *get_peer_addr(int fd)
        return addr_buf;
 }
 
+char *get_socket_addr(int fd)
+{
+       struct sockaddr sa;
+       struct sockaddr_in *sockin = (struct sockaddr_in *) (&sa);
+       int     length = sizeof(sa);
+       static fstring addr_buf;
+
+       fstrcpy(addr_buf,"0.0.0.0");
+
+       if (fd == -1) {
+               return addr_buf;
+       }
+       
+       if (getsockname(fd, &sa, &length) < 0) {
+               DEBUG(0,("getpeername failed. Error was %s\n", strerror(errno) ));
+               return addr_buf;
+       }
+       
+       fstrcpy(addr_buf,(char *)inet_ntoa(sockin->sin_addr));
+       
+       return addr_buf;
+}
+
 /*******************************************************************
  Create protected unix domain socket.