bash scripting help

hi all

i'm trying to get a script working upon connection with pppd
According to docu this happens ina clean environment with a couple of variables set, namely $1,$2,...

To be able to execute the statements i included a path statement but i think i'm running into trouble with the variables - i get an invalid argument error.
(forgot to mention the script works fine from vanilla prompt as root - same credentials pppd uses to execute the script)

#!/bin/bash
export PATH
PATH="/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin:PATH"
iptables -F 
dynip=$(ifconfig ppp0 | grep 'inet addr' | grep -v '127.0.0.1'| awk '{print $2}' | cut -d: -f2) 
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -A FORWARD -i ppp0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i ppp0 -d $dynip --dport 16913 -j DNAT --to 192.168.0.10:16913
iptables -A FORWARD -p tcp -i ppp0 -d 192.168.0.10 --dport 16913 -j ACCEPT
iptables -t nat -A PREROUTING -p udp -i ppp0 -d $dynip --dport 16913 -j DNAT --to 192.168.0.10:16913
iptables -A FORWARD -p udp -i ppp0 -d 192.168.0.10 --dport 16913 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i ppp0 -d $dynip --dport 62601 -j DNAT --to 192.168.0.10:62601
iptables -A FORWARD -p tcp -i ppp0 -d 192.168.0.10 --dport 62601 -j ACCEPT
iptables -t nat -A PREROUTING -p udp -i ppp0 -d $dynip --dport 62601 -j DNAT --to 192.168.0.10:62601
iptables -A FORWARD -p udp -i ppp0 -d 192.168.0.10 --dport 62601 -j ACCEPT
echo $dynip >> /etc/ppp/ip-up/log/nat.log
date >> /etc/ppp/ip-up/log/nat.log

i think this line gives the problem:
dynip=$(ifconfig ppp0 | grep 'inet addr' | grep -v '127.0.0.1'| awk '{print $2}' | cut -d: -f2)

is it possible that $2 is interpreted as the variable the script recieved from pppd on start instead of using the previous statement as input?

First off, please use vB Codes when posting either code or data samples - it makes easier to read for the other potential posters.

Secondly:

#!/bin/bash
# WHY exporting the PATH?
export PATH
# This is not the way to ADD to a current path - you missed '$'
# PATH="/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin:$PATH"
iptables -F

# This is way too many pipes
#dynip=$(ifconfig ppp0 | grep 'inet addr' | grep -v '127.0.0.1'| awk '{print $2}' | cut -d: -f2) 
dynip=$(ifconfig ppp0 | awk '/inet addr/ && !/127.0.0.1/{print $2}' | cut -d: -f2) 

You'll be able to get rid of the trailing 'cut' if you post a sample of your:

ifconfig ppp0

Hm... I don't understand what you're asking, but..... the awk's '$2' in this content refers to the SECOND field on a line that 'ifcong pppd' produces.

Pls post the output of 'ifconfig ppp0'.

i did not say i was an expert at shellscripting :slight_smile:
the export seemed cautious - but i'll remove it

the script has been made mostly from snippets i collected on the internet

here's what i get for ifconfig ppp0:

ppp0      Link encap:Point-to-Point Protocol  
          inet addr:91.86.57.229  P-t-P:91.86.32.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:404180 errors:0 dropped:0 overruns:0 frame:0
          TX packets:298225 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:475984839 (453.9 MiB)  TX bytes:36472112 (34.7 MiB)

seems the grep -v shouldnt be there either but it works - its a line i picked for displaying an ip adress on a linux machine and i need that to set up portforwarding once the dialup connection is established

anyway - the reason i put in the path was because i was trying to 'get' the same environment i get at the prompt - where the thing works ...

ok, try this - put the script in debug mode (adding 'set -x') and see if your code behaves the way you think it should:

#!/bin/bash
set -x
# WHY exporting the PATH?

PATH="/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin:$PATH"
iptables -F

dynip=$(ifconfig ppp0 | awk '/inet addr/ && !/127.0.0.1/{print substr($2, index($2, ":")+1)}')

tx - was looking into that :slight_smile:

well that line works at the prompt :

root[ppp]# ip-up/nat
+ PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/games/bin
+ iptables -F
++ ifconfig ppp0
++ awk '/inet addr/ && !/127.0.0.1/{print substr($2, index($2, ":")+1)}'
+ dynip=91.86.59.95
+ echo 91.86.59.95
+ iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
+ iptables -A FORWARD -i ppp0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
+ iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT
+ iptables -t nat -A PREROUTING -p tcp -i ppp0 -d 91.86.59.95 --dport 16913 -j DNAT --to 192.168.0.10:16913
+ iptables -A FORWARD -p tcp -i ppp0 -d 192.168.0.10 --dport 16913 -j ACCEPT
+ iptables -t nat -A PREROUTING -p udp -i ppp0 -d 91.86.59.95 --dport 16913 -j DNAT --to 192.168.0.10:16913
+ iptables -A FORWARD -p udp -i ppp0 -d 192.168.0.10 --dport 16913 -j ACCEPT
+ iptables -t nat -A PREROUTING -p tcp -i ppp0 -d 91.86.59.95 --dport 62601 -j DNAT --to 192.168.0.10:62601
+ iptables -A FORWARD -p tcp -i ppp0 -d 192.168.0.10 --dport 62601 -j ACCEPT
+ iptables -t nat -A PREROUTING -p udp -i ppp0 -d 91.86.59.95 --dport 62601 -j DNAT --to 192.168.0.10:62601
+ iptables -A FORWARD -p udp -i ppp0 -d 192.168.0.10 --dport 62601 -j ACCEPT
+ echo 91.86.59.95
+ date

this is probably also the right time to tell that pppd redirects script output to /dev/null - all i get in the log is :

Plugin pppoatm.so loaded.
PPPoATM plugin_init
PPPoATM setdevname_pppoatm - SUCCESS:8.35
Using interface ppp0
Connect: ppp0 <--> 8.35
CHAP authentication succeeded: CHAP authentication success, unit 1236
CHAP authentication succeeded
Can't execute /etc/ppp/ip-pre-up: Invalid argument
Cannot determine ethernet address for proxy ARP
local  IP address 91.86.59.95
remote IP address 91.86.32.1
primary   DNS address 212.65.63.218
secondary DNS address 212.224.255.252
Can't execute /etc/ppp/ip-up: Invalid argument

tx for the help - it seems to be a pppd issue ...
i get the same error for this script :

#!/bin/bash
echo 'hello' >> ppp.log