]> git.proxmox.com Git - mirror_lxc.git/commitdiff
template: oci template supports for char user info
authorJungsub Shin <supsup5642@gmail.com>
Fri, 21 Sep 2018 06:29:37 +0000 (15:29 +0900)
committerJungsub Shin <supsup5642@gmail.com>
Fri, 28 Sep 2018 01:14:06 +0000 (10:14 +0900)
oci template changes character user info to uid, gid
according to OCI image spec.

Signed-off-by: Jungsub Shin jungsub_shin@tmax.co.kr
templates/lxc-oci.in

index 2ce1a9385aa574cf6d6dd557e7bced95610d7da4..6ce31a046605e42a1a413da5823625c0b8f8f66e 100644 (file)
@@ -129,23 +129,42 @@ getenv() {
   return
 }
 
-# FIXME 1: only support numerical values in the configuration file.
-# FIXME 2: from the OCI image spec: "If group/gid is not specified,
-# the default group and supplementary groups of the given user/uid in
-# /etc/passwd from the container are applied."
-getuidgid() {
-  if [ "$#" -eq 0 ]; then
-    echo "0 0"
-    return
+# check var is decimal.
+isdecimal() {
+  var="$1"
+  if [ "${var}" -eq "${var}" ] 2> /dev/null; then
+    return 0
+  else 
+    return 1
   fi
+}
 
+# get uid, gid from oci image.
+getuidgid() {
   configpath="$1"
+  rootpath="$2"
+  passwdpath="${rootpath}/etc/passwd"
+  grouppath="${rootpath}/etc/group"
 
-  uidgid=$(jq -c -r '.config.User // "0:0"' < "${configpath}")
+  usergroup=$(jq -c -r '.config.User' < "${configpath}")
   # shellcheck disable=SC2039
-  uidgid=(${uidgid//:/ })
+  usergroup=(${usergroup//:/ })
+
+  user=${usergroup[0]:-0}
+  if ! isdecimal "${user}" && [ -f ${passwdpath} ]; then
+    user=$(grep "^${user}:" "${passwdpath}" | awk -F: '{print $3}')
+  else
+    user=0
+  fi
+
+  group=${usergroup[1]:-}
+  if [ -z "${group}" ] && [ -f "${passwdpath}" ]; then
+    group=$(grep "^[^:]*:[^:]*:${user}:" "${passwdpath}" | awk -F: '{print $4}')
+  elif ! isdecimal "${group}" && [ -f "${grouppath}" ]; then
+    group=$(grep "^${group}:" "${grouppath}" | awk -F: '{print $3}')
+  fi
 
-  printf '%d %d' "${uidgid[0]:-0}" "${uidgid[1]:-0}" 2>/dev/null || true
+  echo "${user:-0} ${group:-0}"
   return
 }
 
@@ -364,7 +383,7 @@ ff02::2 ip6-allrouters
 EOF
 
 # shellcheck disable=SC2039
-uidgid=($(getuidgid "${OCI_CONF_FILE}"))
+uidgid=($(getuidgid "${OCI_CONF_FILE}" "${LXC_ROOTFS}" ))
 # shellcheck disable=SC2039
 echo "lxc.init.uid = ${uidgid[0]}" >> "${LXC_CONF_FILE}"
 # shellcheck disable=SC2039