Skip to contentSkip to conversation

mkcompile_h produces warnings when using domain logins

PATCH In review Michal Marek 2 participants 4 messages Apr 19, 2011 – Apr 29, 2011 1 message not in the archive Kbuild

lore
Share & tools
lore
#1 lore raw
In reply to a message not in the archive

(CC linux-kbuild, please do not send patches to public projects privately)

Quoted 17 lines · Marcin Nowakowski

Fix handling of backslash character in LINUX_COMPILE_BY name

When using a domain login, whoami returns the login in user\domain format. This leads to either warnings on unrecognised escape sequences or escaped characters being generated for the user. This patch ensures that any backslash is escaped to a double-backslash to make sure the name is preserved correctly

scripts/mkcompile_h +1 -1
@@ -64,7 +64,7 @@
    echo \#define UTS_VERSION \"`echo $UTS_VERSION | $UTS_TRUNCATE`\"
 
    echo \#define LINUX_COMPILE_TIME \"`date +%T`\"
-  echo \#define LINUX_COMPILE_BY \"`whoami`\"
+  echo \#define LINUX_COMPILE_BY \"`whoami | sed 
Quoted 2 lines

"s/\\\\\\\\/\\\\\\\\\\\\\\\\/"`\"
echo \#define LINUX_COMPILE_HOST \"hostname | $UTS_TRUNCATE\"

Such long sequence of backslashes is rather unreadable. The same command is equivalent to

sed 's/\\\\/\\\\\\\\/'

if you use single quotes, but I wonder why you need to match two backslashes. You say that whoami returns 'user\domain', so the above regexp wouldn't match it. Also, is it necessary to reproduce the full user\domain string in the macro? Or could we cut everything after the backslash, like

sed 's/\\.*//'

? BTW, I changed the mkcompile_h script recently, see
http://git.kernel.org/?p=linux/kernel/git/mmarek/kbuild-2.6.git;a=blob;f=scripts/mkcompile_h;hb=refs/heads/for-next,
could you base any further version on the for-next branch of kbuild.2.6.git or on linux-next?

Thanks
Michal

#2 lore raw
Quoted 26 lines · Michal Marek

(CC linux-kbuild, please do not send patches to public projects privately)

Quoted 17 lines · Marcin Nowakowski

Fix handling of backslash character in LINUX_COMPILE_BY name

When using a domain login, whoami returns the login in user\domain format. This leads to either warnings on unrecognised escape sequences or escaped characters being generated for the user. This patch ensures that any backslash is escaped to a double-backslash to make sure the name is preserved correctly

scripts/mkcompile_h +1 -1
@@ -64,7 +64,7 @@
     echo \#define UTS_VERSION \"`echo $UTS_VERSION | $UTS_TRUNCATE`\"
 
     echo \#define LINUX_COMPILE_TIME \"`date +%T`\"
-  echo \#define LINUX_COMPILE_BY \"`whoami`\"
+  echo \#define LINUX_COMPILE_BY \"`whoami | sed
Quoted 2 lines

"s/\\\\\\\\/\\\\\\\\\\\\\\\\/"`\"
echo \#define LINUX_COMPILE_HOST \"hostname | $UTS_TRUNCATE\"

Such long sequence of backslashes is rather unreadable. The same command is equivalent to

Quoted 5 lines
   sed 's/\\\\/\\\\\\\\/'

if you use single quotes, but I wonder why you need to match two backslashes. You say that whoami returns 'user\domain', so the above regexp wouldn't match it.

The problem in this case is that when using back-quotes for command substitution, backslashes are escaped so we need the extra layer of escaping. However - having looked again at the bash documentation, I've found that if $(...) syntax is used instead of ... then backslashes are treated literally. That, with addition of single quotes as you had suggested should allow a simple echo \#define LINUX_COMPILE_BY \"$(whoami | sed 's/\\/\\\\/g')\"
instead of the rather unreadable solution I initially suggested.

Quoted 10 lines

Also, is it necessary to reproduce the full
user\domain string in the macro? Or could we cut everything after the backslash, like

   sed  's/\\.*//'

? BTW, I changed the mkcompile_h script recently, see
http://git.kernel.org/?p=linux/kernel/git/mmarek/kbuild-2.6.git;a=blob;f=scripts/mkcompile_h;hb=refs/heads/for-next,
could you base any further version on the for-next branch of kbuild.2.6.git or on linux-next?

I'll re-send a new patched based on this tree and with the cleanup as described above

thanks
Marcin

#3 lore raw

PATCH v2 1/1 Fix handling of backlash character in LINUX_COMPILE_BY name

In reply to a message not in the archive

When using a domain login, whoami returns the login in user\domain format. This leads to either warnings on unrecognised escape sequences or escaped characters being generated for the user. This patch ensures that any backslash is escaped to a double-backslash to make sure the name is preserved correctly. This patch does not enforce escaping on the KBUILD_BUILD_USER variable, as this is something the user has control of and can escape if required.
V2 simplifies a very complex escape pattern introduced initially.

scripts/mkcompile_h +1 -1
index 7ad6bf7..f221ddf 100755
@@ -43,7 +43,7 @@ else
 	TIMESTAMP=$KBUILD_BUILD_TIMESTAMP
 fi
 if test -z "$KBUILD_BUILD_USER"; then
-	LINUX_COMPILE_BY=`whoami`
+	LINUX_COMPILE_BY=$(whoami | sed 's/\\/\\\\/')
 else
 	LINUX_COMPILE_BY=$KBUILD_BUILD_USER
 fi
#4 lore raw

Re: [PATCH V2] Fix handling of backlash character in LINUX_COMPILE_BY name

Quoted 8 lines · Marcin Nowakowski

When using a domain login, whoami returns the login in user\domain format. This leads to either warnings on unrecognised escape sequences or escaped characters being generated for the user. This patch ensures that any backslash is escaped to a double-backslash to make sure the name is preserved correctly. This patch does not enforce escaping on the KBUILD_BUILD_USER variable, as this is something the user has control of and can escape if required.
V2 simplifies a very complex escape pattern introduced initially.

Thanks, this is much more readable :). Applied to kbuild-2.6.git#kbuild.

Michal