From 950765ba1034f125ae8106f1f554bb362abfa108 Mon Sep 17 00:00:00 2001 From: Martin Winter Date: Tue, 24 Jan 2017 22:42:11 +0700 Subject: [PATCH] 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 --- lib/sockopt.c | 23 +++++++++++++++++++++++ lib/sockopt.h | 3 +++ 2 files changed, 26 insertions(+) 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);