Bugzilla will be upgraded to version 5.0. The upgrade date is tentatively scheduled for 2 December 2018, pending final testing and feedback.
Bug 663904 - Special symbol '#' appears in interface names and confuses scripts.
Special symbol '#' appears in interface names and confuses scripts.
Product: Fedora
Classification: Fedora
Component: initscripts (Show other bugs)
Unspecified Unspecified
low Severity medium
: ---
: ---
Assigned To: Bill Nottingham
Fedora Extras Quality Assurance
Depends On:
Blocks: 664051 664091
  Show dependency treegraph
Reported: 2010-12-17 04:53 EST by Anton Guda
Modified: 2014-03-16 23:25 EDT (History)
11 users (show)

See Also:
Fixed In Version: initscripts-9.23-3.fc15
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
: 664051 (view as bug list)
Last Closed: 2010-12-17 15:05:47 EST
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---

Attachments (Terms of Use)
User symbol '_' as a separator (497 bytes, patch)
2010-12-17 04:55 EST, Anton Guda
no flags Details | Diff
0001-add-as-a-valid-characer-in-network-device-names.patch (857 bytes, patch)
2010-12-17 10:56 EST, Matt Domsch
no flags Details | Diff

  None (edit)
Description Anton Guda 2010-12-17 04:53:13 EST
Description of problem:
biosdevname set a names like 'pci3#1' to interfaces.
Some scripts treats '#' as as special symbol.
It may be better to use sifferent separator, like '_' or '-' (seee patch).

Version-Release number of selected component (if applicable):

How reproducible:
Always, if pci card is in slot

Steps to Reproduce:
1. Inser pci network card
2. create appropriate config file /etc/sysconfig/network-scripts/ifcfg-pciNxM
3. service network restart
Actual results:
Interface appears up, but some errors shown:
grep: ifcfg-ifcfg-pci3#1: No such file or directory

Expected results:
Scripts works w/o errors.

Additional info:
There are some old 3-rd party scripts, so it may be better not to fix scripts, but use different separator.
Comment 1 Anton Guda 2010-12-17 04:55:46 EST
Created attachment 469322 [details]
User symbol '_' as a separator
Comment 2 Matt Domsch 2010-12-17 08:22:11 EST
_ is taken in my scheme, to separate NIC partitions & SR-IOV virtual functions.  I'd rather fix the scripts to allow a # in the name.  Pointers to such scripts?  Was this a rawhide install?
Comment 3 Matt Domsch 2010-12-17 09:04:09 EST
I can't see a failure when using pci2#1 as an interface name, on a Fedora 14 system + biosdevname.  ifup/ifdown work as expected.  Can you provide pointers to the failing scripts on your system?
Comment 4 Anton Guda 2010-12-17 09:36:18 EST
Some of them - /etc/init.d/network from initscripts.

Problem part:
# bring up all other interfaces configured to come up boot time   
  for i in $interfaces; do
    eval $(LANG=C grep -F "DEVICE=" ifcfg-$i)
    eval $(LANG=C grep -F "TYPE=" ifcfg-$i)
    eval $(LANG=C grep -F "SLAVE=" ifcfg-$i)

After this eval's error message appears:
grep: ifcfg-ifcfg-pci3#1: No such file or directory

Really, it seems, that some substitutions requires quoting "".
But it's a too common error.

Real error  in in this lines :
interfaces=$(ls ifcfg* | \
 LANG=C sed -e "$__sed_discard_ignored_files" \
   -e '/\(ifcfg-lo$\|:\|ifcfg-.*-range\)/d' \
   -e '/ifcfg-[A-Za-z0-9\._-]\+$/ { s/^ifcfg-//g;s/[0-9]/ &/}' | \ # HERE!
   LANG=C sort -k 1,1 -k 2n | \
   LANG=C sed 's/ //')

May be some another non bash-special symbol, like '@' '=' ,
and add it to allowed char in all scripts?
Dot '.' and ':' are reserver for VLAN-s and aliases.
Comment 5 Matt Domsch 2010-12-17 10:21:45 EST
1) the fact that it's grepping ifcfg-ifcfg-pci3#1 (note the duplicate ifcfg parts of the name) is a problem.  I've never seen that before.

2) sounds like an initscripts problem. Re-assigning.  I agree the sed you note with #HERE will need adjustment to accept the new separator # in the match.
Comment 6 Matt Domsch 2010-12-17 10:53:25 EST
Initscripts patch to add # fixes it:

diff --git a/rc.d/init.d/network b/rc.d/init.d/network
index 482bb7b..b31060b 100755
--- a/rc.d/init.d/network
+++ b/rc.d/init.d/network
@@ -46,7 +46,7 @@ cd /etc/sysconfig/network-scripts
 interfaces=$(ls ifcfg* | \
            LANG=C sed -e "$__sed_discard_ignored_files" \
                       -e '/\(ifcfg-lo$\|:\|ifcfg-.*-range\)/d' \
-                      -e '/ifcfg-[A-Za-z0-9\._-]\+$/ { s/^ifcfg-//g;s/[0-9]/ &/}' | \
+                      -e '/ifcfg-[A-Za-z0-9#\._-]\+$/ { s/^ifcfg-//g;s/[0-9]/ &/}' | \
            LANG=C sort -k 1,1 -k 2n | \
            LANG=C sed 's/ //')

On my system, this results in the interfaces being properly found:
em1 em2 pci2#1
Comment 7 Matt Domsch 2010-12-17 10:56:49 EST
Created attachment 469405 [details]

initscript patch
Comment 8 Bill Nottingham 2010-12-17 15:05:47 EST
Thanks for the patch, building.

Note You need to log in before you can comment on or make changes to this bug.