6bbb925
From 07bf3074ccdd9debe844fe1bae0244799d01fe58 Mon Sep 17 00:00:00 2001
6bbb925
From: Chris Leech <cleech@redhat.com>
6bbb925
Date: Wed, 2 Jan 2013 14:46:14 -0800
6bbb925
Subject: iscsiuio: iscsid IPC newroot command
6bbb925
6bbb925
---
6bbb925
 include/uip_mgmt_ipc.h | 4 ++++
6bbb925
 src/unix/iscsid_ipc.c  | 9 +++++++++
6bbb925
 2 files changed, 13 insertions(+)
6bbb925
6bbb925
diff --git a/include/uip_mgmt_ipc.h b/include/uip_mgmt_ipc.h
6bbb925
index 7054df5..db87b2b 100644
6bbb925
--- a/include/uip_mgmt_ipc.h
6bbb925
+++ b/include/uip_mgmt_ipc.h
6bbb925
@@ -26,6 +26,7 @@
6bbb925
 typedef enum iscsid_uip_cmd {
6bbb925
 	ISCSID_UIP_IPC_UNKNOWN                  = 0,
6bbb925
 	ISCSID_UIP_IPC_GET_IFACE                = 1,
6bbb925
+	ISCSID_UIP_NEWROOT			= 2,
6bbb925
 
6bbb925
 	__ISCSID_UIP_IPC_MAX_COMMAND
6bbb925
 } iscsid_uip_cmd_e;
6bbb925
@@ -45,6 +46,9 @@ typedef struct iscsid_uip_broadcast {
6bbb925
 		struct ipc_broadcast_iface_rec {
6bbb925
 			struct iface_rec rec;
6bbb925
 		} iface_rec;
6bbb925
+		struct ipc_broadcast_newroot {
6bbb925
+			char path[PATH_MAX + 1];
6bbb925
+		} newroot;
6bbb925
 	} u;
6bbb925
 } iscsid_uip_broadcast_t;
6bbb925
 
6bbb925
diff --git a/src/unix/iscsid_ipc.c b/src/unix/iscsid_ipc.c
6bbb925
index 1c28822..dcbeb4c 100644
6bbb925
--- a/src/unix/iscsid_ipc.c
6bbb925
+++ b/src/unix/iscsid_ipc.c
6bbb925
@@ -801,6 +801,7 @@ int process_iscsid_broadcast(int s2)
6bbb925
 	size_t size;
6bbb925
 	iscsid_uip_cmd_e cmd;
6bbb925
 	uint32_t payload_len;
6bbb925
+	char *newroot;
6bbb925
 
6bbb925
 	fd = fdopen(s2, "r+");
6bbb925
 	if (fd == NULL) {
6bbb925
@@ -857,6 +858,14 @@ int process_iscsid_broadcast(int s2)
6bbb925
 		}
6bbb925
 
6bbb925
 		break;
6bbb925
+	case ISCSID_UIP_NEWROOT:
6bbb925
+		rsp.command = cmd;
6bbb925
+		newroot = data->u.newroot.path;
6bbb925
+		if (chdir(newroot) || chroot(".") || chdir("/"))
6bbb925
+			rsp.err = ISCSID_UIP_MGMT_IPC_ERR;
6bbb925
+		else
6bbb925
+			rsp.err = ISCSID_UIP_MGMT_IPC_OK;
6bbb925
+		break;
6bbb925
 	default:
6bbb925
 		LOG_WARN(PFX "Unknown iscsid broadcast command: %x",
6bbb925
 			 data->header.command);
6bbb925
-- 
6bbb925
1.7.11.7
6bbb925