From 17666a51d867ebd69fcc1d7dd4c5884135cf696a Mon Sep 17 00:00:00 2001 From: Zach Anderson Date: Wed, 1 May 2019 22:12:39 -0500 Subject: [PATCH 1/5] Use netifaces to portably look up interface address --- bsdpserver.py | 13 ++++--------- requirements.txt | 1 + 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/bsdpserver.py b/bsdpserver.py index 35e5294..5e65669 100755 --- a/bsdpserver.py +++ b/bsdpserver.py @@ -66,6 +66,7 @@ import signal import errno import json +import netifaces from distutils.dir_util import mkpath from random import randint @@ -145,17 +146,11 @@ def get_ip(iface=''): The get_ip function retrieves the IP for the network interface BSDPY is running on. """ - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - sockfd = sock.fileno() - SIOCGIFADDR = 0x8915 - - ifreq = struct.pack('16sH14s', iface, socket.AF_INET, '\x00' * 14) try: - res = fcntl.ioctl(sockfd, SIOCGIFADDR, ifreq) + return netifaces.ifaddresses(iface)[netifaces.AF_INET][0]['addr'] except: - return None - ip = struct.unpack('16sH2x4s8x', res)[2] - return socket.inet_ntoa(ip) + print("Failed to get ip address of {}".format(iface)) + raise dockervars = {} redisvars = {} diff --git a/requirements.txt b/requirements.txt index b5dcbcc..92d899d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ docopt +netifaces requests redis From f763cfdd1b48f35a7987f751dc589f7db99b684a Mon Sep 17 00:00:00 2001 From: Zach Anderson Date: Wed, 1 May 2019 23:01:25 -0500 Subject: [PATCH 2/5] Added github default python gitignore --- .gitignore | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dedd352 --- /dev/null +++ b/.gitignore @@ -0,0 +1,124 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don’t work, or not +# install all needed dependencies. +#Pipfile.lock + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + From bc7462338af5f3ff355271774f5511dd8dfff19f Mon Sep 17 00:00:00 2001 From: Zach Anderson Date: Wed, 1 May 2019 23:11:00 -0500 Subject: [PATCH 3/5] Removed committed python bytecode --- pydhcplib/__init__.pyc | Bin 167 -> 0 bytes pydhcplib/dhcp_basic_packet.pyc | Bin 4976 -> 0 bytes pydhcplib/dhcp_constants.pyc | Bin 11033 -> 0 bytes pydhcplib/dhcp_network.pyc | Bin 9927 -> 0 bytes pydhcplib/dhcp_packet.pyc | Bin 11089 -> 0 bytes pydhcplib/type_hwmac.pyc | Bin 3179 -> 0 bytes pydhcplib/type_ipv4.pyc | Bin 4359 -> 0 bytes pydhcplib/type_strlist.pyc | Bin 2129 -> 0 bytes 8 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 pydhcplib/__init__.pyc delete mode 100644 pydhcplib/dhcp_basic_packet.pyc delete mode 100644 pydhcplib/dhcp_constants.pyc delete mode 100644 pydhcplib/dhcp_network.pyc delete mode 100644 pydhcplib/dhcp_packet.pyc delete mode 100644 pydhcplib/type_hwmac.pyc delete mode 100644 pydhcplib/type_ipv4.pyc delete mode 100644 pydhcplib/type_strlist.pyc diff --git a/pydhcplib/__init__.pyc b/pydhcplib/__init__.pyc deleted file mode 100644 index 39b577f50b6637bd0365ad8a0e7c94ac6400ed4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 zcmZSn%*)l&GB+rh0SXv_v;z zwWv5VKQBIB1IT4S5XDA7u6}4SP+C8!s5CP*FE3TUIKQ+gIaNQYIHjOczo0TDBe@_a kGf6)_J~J<~BtBlRpt6JmsLdufKczG$)edA$F%UBV04;YUmH+?% diff --git a/pydhcplib/dhcp_basic_packet.pyc b/pydhcplib/dhcp_basic_packet.pyc deleted file mode 100644 index 95e86e641aa1f848d8e73e58b12e8ca7e8429f9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4976 zcmb_gU2hx56`k2#QX(arvMfkm*GOciKLWISVJCatS zNNQ*4NU2y9upjdm0t9{UL*EMYwLhS*{SSRe(I3#BbBA9_`cjm(IJ|eh=iGblouU7) zE7h-Ge-ky;;Gd805Am^|qe$_mRZFQ|Cwr=;)rqHeJ*C;^i|(sk-|2yB1?u@=R7vfY zREobDm6p|OrCurZ`EHpr?$l>7d-iYq+pcSfMHxk}-A$UuP7k1uHFkNYsG;0CY<3?f zHf#O{T}?6CwuiRI_}DK{7;IQ`^H>yH#ex)km3krs+&F8nw?G7JswBd2tGlz@Hv3eR zsj75Vz1C`XPDMNQ3KnQ`L;M8zJi*64LVP0?<7!Q7zm9e#h5Z?%wNI_d?OG%6Wv1OWYi{UT!=~NyweEQe z)LU6&jo)#D@W*an54z_CO&P~oJ1gS&7G%o`r5AJspAk~@D?#cF2m>?(tlNcF$G*yM z5~dwMvr}i^ZNWhh5riVb6wyth859N8=XuY_u_78}ibo>Q&n$h-x!E1)mTN1$tODJn zw{eriTMo4cp}@JcdIfXiK%UA!RcD*5+1h)k`kpj<((LiP_L;g6*F475PDXv8@=y_j z(@?#@83hmV5{C(v0c}t?2O$W>dDjRUt;`k}iVp2UFpB6N0;b?2hI*OgS<+~^5hiIK zP7yU4;mM(C9zVyH-iBg{qtc7|ihf7W>H%=vG(Q5|YX|`DNDr{fcLz9zU{g4N4H7j6 za0mv4D}At8=r&PF+8u#v`16HiJFEyMCjY&79%@R12z^<|K{rU<^U$5rA#}WBK|~s z%fPng*AgUt0^Kg6P<~Bc)i?EN&5;P0!*(-ixpP4ST-?QC}jvBejrU+?2uWBa)b|hZF<&v|2%2&~&t+ zzxwcQe+V)1(a5_2+DbnVFNXKd(3dX)xbrN=RwhvXv(Dz2zc7|eKv`0csGuqkz3lW+ z`wVo1+>t)}J-q@Qxo*@x2Yqt>dFW_F7q{LOr=yG0uR47+zUFi+>Dm|6qdtgNQbkqa zD0Gi7?3c$N_HkOIVt|1UVZ6}LFJ>4{?YERMQ%GH_{7)JJtEwtoW`BfS)H!FJ+f&4;L>RuS%)*-vp+}g|KTXucdvci?tIxEo~KSaj43M73TKpW zdu|5@NdbghI=;*i_gvBuGBYp=dl@|)$!xKJ$_brW!bTj z>UsSkl3n1qncgw?T&$#NYt3viq89W&=wZ0Uzc>9_^ecoX90i2o=^mQVu@^tC$s?f9^-VEMfxUW1Si zKuz9=kvulXVt9mT=xP}%zt@0xh+v4J7=-4_J&?@8ar1`1dAh7#U>(HQv$}$#U^1YK zJz(6{-V(RLsERuWMsA?n={M>HXOIB1iZ+SB2;Ych65cfk2c97iyVVhIRuIb&U>L|y z>nX%+kQC7k>eqbYkO8{QVNywt zj(9~b-zP~|zMF@6#98Yc?CyA^PA3O1qidXn&fy}IqpZ8N%T17Cynj+m(OJmRkK4^o zYTUK?chK!E6v{7q%b-lC@8~!Eay3+o-Zc#~BU?@ep1aZg}z>|Fwru3Xk4P2axykcC-d#yB8j5Ao`W2o?vH?dH&MOaV zvL-c+-hrf9_d5i+A)L*GF34|rQh<dOZ1iK)%NkSO Xx9n!q!T1Y8Ckb;NHdp}u^QHd)`UlDt diff --git a/pydhcplib/dhcp_constants.pyc b/pydhcplib/dhcp_constants.pyc deleted file mode 100644 index e0a4c5bb189500bb035870c7bcc297aed2fa364e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11033 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 diff --git a/pydhcplib/dhcp_network.pyc b/pydhcplib/dhcp_network.pyc deleted file mode 100644 index 23db3682a78a379b7e385185b6679cb9a3138b57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9927 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 NCv)nDXGZaJ`M*}5(kK7` diff --git a/pydhcplib/dhcp_packet.pyc b/pydhcplib/dhcp_packet.pyc deleted file mode 100644 index e884a4545be4b8fad6aabe93370849f15ee0a60c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11089 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 O;P(gx{l@PN?EeC0wm#ti diff --git a/pydhcplib/type_hwmac.pyc b/pydhcplib/type_hwmac.pyc deleted file mode 100644 index a0664297b39841587f4ca0f36b775fc58db8b3a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3179 zcmb_eU2hvz5S_IhCr(ou`T>Opv_M6Tq9zeg9s)vz1hpV)#5xcWsjN1;H}NL+uDkad zC(yo-J|gi4;8*ek;GDU35-NmLWbfYb-QAfxbI+Wa-TI%G7k_>BN0iFsSI7T740{J6 z!x>0lWDv-1AcLCh)+ESklFdn0muDiUBH!=UC2L5x-GoK{7k=#;X08P>DthL)pYNZz zd0b8BbDWO{NqXj$2A^SA1Azf&-uE*&hPxVl(T_UaZO|d_AdESkG$m{5WL~m)oh(SU zpp%wlEuAb%wy2X!5_Q{`=6j|f?`AM=hglAv=^c62w>bB$Hi#Cn~pbm?ftn1bzlxy5S6POW8|}; zTc&1L!`d!86Z6Zwx!E)65$=4&1-XK*tojqZ?a~`6y|%Ib=T%i!Z8}i{Yx?`@>c^x% zGM;whn1QsRA}Z_$n5}(lO=Z{is!?u=!mQbHRHbHZ&t}7uwc$zDONae@Z;h7N709|e zJaG#!jAKF+#{}BG0U<#P#}bY?j8aP1Q>K&aMvPMx;3FbQ zG|k)9$Y`61UYgz-CY75(jwAYC!LX#A1UFocRDv`m{ z8Z(RJ`1yGqLkCZ%jpX>lsiD^lWb4se+DxF=V5dO3z+m(iG#P&ekH3(ej3rO3I*#PJ zqjE##YMT^|7@cyzGQ)n78m)+aIX06r1ht(v7%v(LsWsb3_^#OcuSi(fXH|p>nIc0BJ)6mtIPN937ss;=?rp4mALB(~ znt8$|uNTy86~|v*h=?dmhf;{|9uF6~J-<4xu}-?^H(jmVj_<~#+y!zenA$HHdg*#* z7R9W6CXUm=FpeK$UCZ*7;EFWPxlhl}1wMJ}A#enZUODM#|Ncpqb0@l|3)`7x)%vfQ zxG0OCOjXA5H}H31BW)J-Bt1nkFmdcZcj7^rjrzEZ_$8^Yj)=W2qJG5si%9*56pLLo*TYew_ diff --git a/pydhcplib/type_ipv4.pyc b/pydhcplib/type_ipv4.pyc deleted file mode 100644 index 21761120185643bed655b2efa7f5b56552a9d4e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4359 zcmcgv-EI>{6h7;}*omFAKnPI*tx#LJEh1G4H)KzFm&`@Dsf_W7dBv??PDM3?(mIN&o7A06z zVM)Br_7Y8+L-p|${q$%jkIAxuVwN2oN92(sM~*x$$)l3wj_j8tyC;uC_Ryn4<`c;k zjwdCFbv{P@iq5GLAcwPS6KPJR_zzWBSB1ap}^0j;F@AsYjKVaPU)3&j9pMn3LMrjyTX!q7|qrvi6M$Gqbjn zjiNA)!!?tPvR=5hV}kT>Ejt-mtZ^j_KDc@%J+#L8^o8#)Lx;ISolX;oIZ=jf;QIW|=AC7#EL~v`@Qda9dM?=hxm+d$LQG;oE zsPf_=XdJIlenTbN<_Q5qa<>}smIfMB)+oWfV{c&f}&1WSm?Q@LazaT9EvmW1cU7wilJcw zFMKxk0*^QG!YwpFbr2p{A6jGleDb>v+6}Uxk~rP}9U- z62%^g?kOG$55apw93>#vQ4FI&oQp5S#iG&X`4s`4tLyyk%wxLh9Pz(imc|(|C zW@-rEKi{Lgsv!h(riL(M{CJWfd^B3u@a1vrAR?$&RPnCrcTL~-XKLHK*kb1-+x{oo z6erBWH1qv%${=FELar;1HOpAM^g%+%n7k~fIaP1`-Y`|@+U&8{IjNrH{V;p|(9>x5 zeQe_UeW-n&W874&<^5}2Tjb```WqOHBEQ&7OXICyXU#tQgTjxK_+gkOzK<(le4#8M zTeSItEx?bv!_fEb&m4c41fv0(9-s00g!D)Sug;2@&|Z3Ui+v$5-0T~RobujdMWDS8 zP#q(#(trJZ;X#$0K{4l1)tu&PW3EwcR8Y?~>iDiSYK<~K9lIlO)kQNhK#{s(vAL;+ HU<3IVG?`6d diff --git a/pydhcplib/type_strlist.pyc b/pydhcplib/type_strlist.pyc deleted file mode 100644 index 16c2450a83cd5e0b58028b468a61c90b2f631a37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2129 zcmcgt$!-%t5Url^HX%_EVNoOw!y;q}2}>XlLJ=UA0~a60EW#3MO+1}=9D8Qy=|~tk z7m_2tzz6UH{1`vLs~U&okRYTO5_h?}s=Mmd(q;eW%F@?^Z_$9}e?GpSVwG1w5`270 z6de%l6TRp)P$*1 zQWvH{Nkf<>B~4*kl(d8iDC)HX*mYPmU{{Qzj`bX?`~d>hOwqogJvdV|BhretAq3;m z%p>R1jz_lSW0m&Pj9iUeowp;oi|a2w+@L*QL>`SA9BieY`Lqr_KI-EudY3&Bqb)J| z{m`iR9tGr<$eo)T+4uNTjhv>P|5g(^_+ev|eL3 zm)WdZR)GpUrdQQX*{XG^= z=AyAI!R9TjQ?am9Jeyvd!FE%Sc@{WH(ZZ4yEYaZEE%231|pX{29YYf|JWLG05kR*t07d~k7oB?}u>+>gaS G+y4ax$fvac From 48a79c78a0ec94cb43c7260fde12b54b7a3d029d Mon Sep 17 00:00:00 2001 From: Zach Anderson Date: Wed, 8 May 2019 16:46:08 -0500 Subject: [PATCH 4/5] Convert interface ip from unicode to str --- bsdpserver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bsdpserver.py b/bsdpserver.py index 5e65669..e406d1e 100755 --- a/bsdpserver.py +++ b/bsdpserver.py @@ -147,7 +147,7 @@ def get_ip(iface=''): is running on. """ try: - return netifaces.ifaddresses(iface)[netifaces.AF_INET][0]['addr'] + return str(netifaces.ifaddresses(iface)[netifaces.AF_INET][0]['addr']) except: print("Failed to get ip address of {}".format(iface)) raise From 4bf417e6a6c200e5de88e22d5687ccee15ed017c Mon Sep 17 00:00:00 2001 From: Zach Anderson Date: Wed, 8 May 2019 17:20:45 -0500 Subject: [PATCH 5/5] Use relative path from tftp root for tftp URI --- bsdpserver.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bsdpserver.py b/bsdpserver.py index e406d1e..698bd80 100755 --- a/bsdpserver.py +++ b/bsdpserver.py @@ -429,8 +429,10 @@ def getNbiOptions(incoming): else: thisnbi['id'] = nbimageinfo['Index'] - thisnbi['booter'] = \ - find(nbimageinfo['BootFile'], path)[0] + abs_booter_path = find(nbimageinfo['BootFile'], path)[0] + tftp_path = os.path.relpath(abs_booter_path, tftprootpath) + thisnbi['booter'] = '/' + tftp_path + thisnbi['description'] = \ nbimageinfo['Description'] thisnbi['disabledsysids'] = \