|
|
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 |
|