diff options
| author | Martin Winter <mwinter@opensourcerouting.org> | 2017-01-24 22:42:11 +0700 |
|---|---|---|
| committer | Martin Winter <mwinter@opensourcerouting.org> | 2017-01-26 00:40:55 +0700 |
| commit | 950765ba1034f125ae8106f1f554bb362abfa108 (patch) | |
| tree | 32a5f1810e77c23a5ecfb029df6081e267207435 | |
| parent | 780cff2f08530e449fb3bec45483e753a3ce2189 (diff) | |
lib: Add set_socket_path() to sockopt.c to override the path element of a (vty) socket (but keep filename)
Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
| -rw-r--r-- | lib/sockopt.c | 23 | ||||
| -rw-r--r-- | lib/sockopt.h | 3 |
2 files changed, 26 insertions, 0 deletions
diff --git a/lib/sockopt.c b/lib/sockopt.c index 461e1f7f54..570b575a7a 100644 --- a/lib/sockopt.c +++ b/lib/sockopt.c @@ -29,6 +29,29 @@ #include "sockopt.h" #include "sockunion.h" +/* Replace the path of given defaultpath with newpath, but keep filename */ +void +set_socket_path (char *path, char *defaultpath, char *newpath, int maxsize) +{ + char *sock_name; + + sock_name = strrchr(defaultpath, '/'); + if (sock_name) + /* skip '/' */ + sock_name++; + else + /* + * VTYSH_PATH configured as relative path + * during config? Should really never happen for + * sensible config + */ + sock_name = defaultpath; + + strlcpy (path, newpath, maxsize); + strlcat (path, "/", maxsize); + strlcat (path, sock_name, maxsize); +} + void setsockopt_so_recvbuf (int sock, int size) { diff --git a/lib/sockopt.h b/lib/sockopt.h index b3ab57ab71..8e7895dd6f 100644 --- a/lib/sockopt.h +++ b/lib/sockopt.h @@ -24,6 +24,9 @@ #include "sockunion.h" +/* Override (vty) socket paths, but keep the filename */ +extern void set_socket_path (char *path, char *defaultpath, char *newpath, int maxsize); + extern void setsockopt_so_recvbuf (int sock, int size); extern void setsockopt_so_sendbuf (const int sock, int size); extern int getsockopt_so_sendbuf (const int sock); |
