From fcc3f73807a45829255b1701fd7646a5b8e91c37 Mon Sep 17 00:00:00 2001 From: Alexander Zhirov Date: Thu, 18 Aug 2022 11:03:28 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8?= =?UTF-8?q?=20MAC-=D0=B0=D0=B4=D1=80=D0=B5=D1=81=D0=B0=20=D0=B8=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F/=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D1=81=D0=B8=D0=BC=D0=B2=D0=BE=D0=BB=D0=B8=D1=87=D0=B5?= =?UTF-8?q?=D1=81=D0=BA=D0=BE=D0=B9=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- APKBUILD | 2 +- README.md | 115 ++++++++++++++++++++++++++ img/protocol.png | Bin 0 -> 9782 bytes package/APKINDEX.tar.gz | Bin 0 -> 842 bytes package/key/abuild.conf | 1 + package/key/packager-62fdf15d.rsa | 27 ++++++ package/key/packager-62fdf15d.rsa.pub | 9 ++ package/tftp-hpa-5.2-r4.apk | Bin 0 -> 32074 bytes package/tftp-hpa-doc-5.2-r4.apk | Bin 0 -> 9906 bytes trq/trq.c | 43 ++++++---- 10 files changed, 178 insertions(+), 19 deletions(-) create mode 100644 README.md create mode 100644 img/protocol.png create mode 100644 package/APKINDEX.tar.gz create mode 100644 package/key/abuild.conf create mode 100644 package/key/packager-62fdf15d.rsa create mode 100644 package/key/packager-62fdf15d.rsa.pub create mode 100644 package/tftp-hpa-5.2-r4.apk create mode 100644 package/tftp-hpa-doc-5.2-r4.apk diff --git a/APKBUILD b/APKBUILD index dbdbf89..9e36984 100644 --- a/APKBUILD +++ b/APKBUILD @@ -41,5 +41,5 @@ a836823eda80e43b8914b7b045b91703faded83d2b1482a0d17f0fb903cbc0ce17dd9e0c06a2f6e3 8a5de40dde8a5e569fce4309e01341a77a4e36cdcb5fe602948d5b34ee2646bd83840158d7d61a45c17e71cc893f3e9bd04a38ebcc7a6a8fff98f46a50d74e96 in.tftpd.confd 40127e7ce276a2bc015255dbeef2665bfe8ff006b1e1d8fb79797e946d6030fd74606cffe0bea11eaad276a693f223faaaf1c1ccb5f276b40fdad40b366172b7 fix-common.patch 736e205531c25da2a1c3ad0311c2be6a95a2778ecbce976be057c3bf2b8da65cccce9e7013deded61217a61f32dd18bdea311807504d60cadbd16687471deb70 trq.patch -929749b3e2a297197b2be124df6364fad38f226d54fe6f006dc257457db5a247f6f5006063479b09ee20c7d8de7174e31db3d54b5956f841eee0f725edf31f3d trq.c +314eea07339e7c8605a69db65638aacfb488077f39b127bdc81369202d0edae6545a456705cebe08fde3729293b7609892a09d91ec2f7dc93b63d693b10ff833 trq.c 29cc72f3197bcaea4a88dace5c91d53dad5d20a397752198e601e2ed83fdb66fca50a5b4b03c4d3033ebd7a0be1e90801a692c514733412d8d96cafde26e0837 trq.h" diff --git a/README.md b/README.md new file mode 100644 index 0000000..705b141 --- /dev/null +++ b/README.md @@ -0,0 +1,115 @@ +# tftp-hpa + +- [Описание](#описание) +- [Пример запроса на `php`](#пример-запроса-на-php) +- [Сборка пакета в Docker](#сборка-пакета-в-docker) +- [Безопасность](#безопасность) + +![protocol](img/protocol.png) + +## Описание + +К [стандартным](http://isp.vsi.ru/library/Networking/TCPIPIllustrated/tftp_tri.htm) `opcodes` `RRQ` и `WRQ` был добавлен `TRQ` (*Thinstation Request*) со значением `6`, позволяющий создать символическую ссылку на файл-загрузчик для PXE-сервера. + +Структура `filename` принимаемая TFTP-сервером состоит из частей, разделённая `;`: +```sh +01-;; +``` +где +- `01` - указывается как префикс MAC-адреса тонкого клиента +- `mac-address` - MAC-адрес тонкого клиента в нижнем регистре, разделённого `-`, например `ff-ff-ff-ff-ff-ff` +- `command` - команда (`cr`/`rm`) для создания/удаления символической ссылки на файл +- `source-file` - основной файл, на который необходимо создать символическую ссылку + +Символическая ссылка создаётся в директории `mac.cfg` с правами `drwxrwxrwx`, расположенной в корневой директории TFTP сервера. +Например, структура `filename` создания симолической ссылки на файл `thinstation`: + +```sh +01-ff-ff-ff-ff-ff-ff;cr;thinstation +``` + +Удаление символической ссылки: + +```sh +01-ff-ff-ff-ff-ff-ff;rm +``` + +Структура каталога `tftpboot`: + +```sh +. +└── tftpboot +    └── [drwxrwxrwx] mac.cfg + ├── 01-ff-ff-ff-ff-ff-ff -> thinstation +    └── thinstation +``` + +## Пример запроса на PHP + +Создание пакета на `php` для создания символической ссылки, отправляемого на TFTP-сервер: + +```php +$opcode = 6; // TRQ opcode +$request = '01-ff-ff-ff-ff-ff-ff;cr;thinstation'; +$mode = 'octet'; +$ip = '192.168.1.1'; +$port = 69; +$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); +$package = chr(0) . chr($opcode) . $request . chr(0) . $mode . chr(0); +socket_sendto($sock, $package, strlen($package), MSG_EOF, $ip, $port); +socket_close($sock); +``` + +## Сборка пакета в Docker + +Склонировать репозиторий в удобное место: + +```sh +git clone https://git.zhirov.website/alexander/tftp-hpa.git tftp-hpa +``` + +Войти в оболочку `alpine` для сборки пакета запустив `docker` командой: + +```sh +docker run --rm -it -v $PWD/tftp-hpa:/home/packager/reposerve/main/tftp-hpa alpine:latest sh +``` + +Установить инструменты разработчика: + +```sh +apk add sudo build-base alpine-sdk +``` + +Cоздать пользователя `packager` и добавьте его в список sudo + +```sh +adduser -D packager +addgroup packager abuild +echo 'packager ALL=(ALL) NOPASSWD:ALL' >/etc/sudoers.d/packager +``` + +Войти под созданным пользователем `packager`: + +```sh +sudo -u packager sh +``` + +Сгенерировать ключи: + +```sh +abuild-keygen -a -i +``` + +Собрать пакет: + +```sh +cd /home/packager/reposerve/main/tftp-hpa +REPODEST=~/packages/latest abuild -r +``` + +Для установки в других экземплярах `alpine` возможно понадобятся сгенерированные ранее ключи для сборки пакета (`/home/packager/.abuild/{*.rsa,*.rsa.pub}`). + + +## Безопасность + +Отсутствует проверка на источник запроса, так как сформировать запрос на создание/удаление символической ссылки выполняется в произвольной форме. diff --git a/img/protocol.png b/img/protocol.png new file mode 100644 index 0000000000000000000000000000000000000000..403d091c6466a3c166416195844ceff90b3002c7 GIT binary patch literal 9782 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

C567iFIw(*<#H z?Qj==py;uc6Y(^u1GReaHMOL0JNL_`P3!lOL*vW?ZuU4ybR%KtCQq%pHOosZX;-f9 zeN3oK=z_mHdLiADfsg4;{{0(5Q=dr2Etcv7XLQGAn0b+Q_yKwmSGxSh=c#EmAdaX@z#rIl^XpK^BvD1uEtLcB2&eX)l2XRsKhf}0jlIB){9ihATp+qI`DLD zQC@47rU78L4*wIx9i?0-9!iidVT0%XZc+VnY+ISyWu)*Wy>`Z$@7Q5vAY%R13Y#-C zZ;k;Sbw+;wPI?1%&5IzfCYt`$2K}=gI)^j=xW@NK1NH36f11d=_jBO$WAJX~@0h5m z`v2=BNKH{?ft+gf${-Rz{?m~CiziPUedqvTADkv*S$Y;UXaeMYb)(E{a_hvCXA&X1 ziZt)QJ5r@wUG~G(o%RvNmZyRK=zzMDzBQ#;X#$VUV1Li zCOeQ_z(h?Os$iO?67^}1nF}Q1{W4EnwORYr7IN9Gh#GK_&!J<8?cN|vwIDiiwA|2) zQ12hgg#>>KLDZt3AF4cafFND+8dwI|GzRSFUmb+M6TkQ}$?UT!j0V9ThnV!)G3~m^ z`ragYG~9y45>^G`_q!BRoVbMfLnRf9EN2m=!jfD=vT`48w+t&0Uc{0nIg^7@nvMg_ zWzyWrGx$k$81em5U#D;owzi4SSuc)OD5R4}8lKotV|$U9Pp@fned7b!?<0PV?XpN9 zG@w$LuI!F-Uf6o@p~{{DumXNFP4#LSxl5(dRWyzjzHGZW9tTHPqs_~r9*BG|qM*4% z$&*$DY5SeOZ9RqSv!@YhiLEyW*-aBOLXzT0@qLn`-X9*b%y30m7`PeC*X)P}*yqspRC`9#({ks_*WF z%#jbfXGj78U`S9@rM9=kn7L8Df3H%o-Dm+X!>Y-ZxVLRKz3E==i0bZ!6i9}L8EKSMm7Pw}Ee0W;Naz;r| z`Ihh-l0HluNATbcky!OrkCe%}wY(^An~Rq_g}`JBzo~|eL)?2JA)Ql7y4*_0FlQsz z`6GH5D0*^X+pFk0shf~vpAO?mz||2Xi;gHfj8SPGoC$AjtaN?In!F6);#6njoa-( zu5b8t9`uqgO-W5d&$5dmexwwCI--;&R1Ul-FceVYEqlFaZ$X@ypKpA2zv6VE@5va9 z7mR@P0Hxz8rtJw zD9rdNqNK{PfgYNXbp>z&VUSF{diMa^?H)7#6H$$_yfV0oEK%;e1-gra^g+o>dSOs= z{LX>EpO$)+?Y!lQxzn#b?uViqE3k!r9d|d*u+@z%&h19$FEiPIJDee-qME5A6xa8L)T;?j*hv|Eir4d}CxqIc9I_;QM}Xzf1jH zRcU22wcvDJfwq{?7^5G)2FR}m77_TN`EJ5+Xp}!#l@`Wm{4kyA!@phq7;#W!5D=d{ zM$wI3%>)b3a0Rti`Qny2VuWDI4!nMx;J4_TK$rbA(Nt_&9ch}HeK4d?UjeRxBT1rI zK9tyrjd@|YBer9?u5$5C8vu}zoc$I+P0$?D*K*bDPFaZOx*BqqUbiqrHzK3CzI0|q z2&_&9KY#yXbkpsy(T#Pij8rs;QJ1cVy_P<`!wpjy9~v{}K}lO`-lm=af6JMfMN#bU zhFW~>u==C(>#?-WQsMUAM9MG|Y=(ns{cu1TQop;I^*k7}funk{A)c}Sgu27I*C9HK z=z$OuIu2VOh^s_=ljbi=C!qnBL0={EmF#(OH%3~bpIHm3)lHEL?%7!zWagI3d|t19 zd8oKE-RWcR7xg$|DtFqzjlLKRk{+_IEVXBg#6?muhe%M@>CXvTJY)}`YY|3l#;&p# zt*?{(!ATMyM$UyI>7=T{_~Q3;l5$q`bK+ETxhq1B&D3|E4QEt^NOo{Jh=A;M!xXDz zPCSvUPY(0VzthkAo5V?=+p!kUiieHit;Yt&V^v*_%1VPKI5ibvp z@q1s^Mh-h!&&1W>-8`L!@wcT6LRW$J#s7j+XW4p&DQ9N!*v|CP{QY@}LASjJk-m{p zbSIbUU-_Xt!RPa0kVB)%Q&*#>?Rt0V(C^$hd~lJ$_1%zQeVv6C%GX&otzax)p%QkS z_YFT;qcaqF)31Q$2$`Gu7z09!n`wtoSHdvfyCht0TGcD3gzkHH#l;T!!OrgrQ=Zzg$XE-PNpEou*tl9F zSEej9jvllB2n&jUk)3#lNmNoSJxcLK@VRSP_pj=;Z>|6@X}v`gw|a*0&TESfQe zFYG4I3O=2hY6>lb#m$XghwjTDYUbK+MQL^B(Zoul=!EZDm|27_$(kLzQ47}g&XulO z_ExW3iHX|Lp35cSV`3}5T6U@Q1=1(otMeToX!@(jftM+=EF?P2MREJH!&oe~ig=9&u~xt^_FK4`kOAW43HM4dg7B`$D(7 z2I;{n1C_ceZ0YvekELhQC&(q?4tbAp{yF08CF0^G(yyBYaf+<;5ZxWupP9}g9&zoL z_6MJoe4W_%Mi<3U<^hNKDR7OiwM+H8V;}Ni#G}(JLxW)GH`W zVxSZl0D+l_377@~blSiK$Tl=FGB-CiH!w8=iW?f68W=Gs7%TpOb#gE~@wR-_`Uv)6JV# z>KwnRzxSASPH0-^$C6Izq+fIHZplw)wR8S{mf`8gcS{yCxCR}_w_b15d-{Bj_5|Vi zUN{nczXq$fcXSZc>0K@0BwVE%2t15OrKfXwFU7OwM z9hdiBvbpRr!@=p)+odj%-kZhO*nZ9Ro%5nCJ3HKW&FUu`G`xkb)R`A`I8>ua<|w`Me!A!DEK`XRIUEkcM%LeC4PW$!+d`H` z7^TaX;EErNsT%G$UDw%1S(h@mb^X<;+SqAyW;#(zrs!2>^q-Vsf>^w`y~qZI6?1-CVA!d?N6HG5x!` zKWdw~$S1uwjG52=Chj?j3VEY>uHwWl+9sd=e5l=M8-t1`Maora4<)5{3gNIeEZi#{ U|HmUEBO|BcI~2_TumBDK0M&z*&Hw-a literal 0 HcmV?d00001 diff --git a/package/key/abuild.conf b/package/key/abuild.conf new file mode 100644 index 0000000..2a13ccb --- /dev/null +++ b/package/key/abuild.conf @@ -0,0 +1 @@ +PACKAGER_PRIVKEY="/home/packager/.abuild/packager-62fdf15d.rsa" diff --git a/package/key/packager-62fdf15d.rsa b/package/key/packager-62fdf15d.rsa new file mode 100644 index 0000000..0b0b963 --- /dev/null +++ b/package/key/packager-62fdf15d.rsa @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEA7X2j1S7QDmBUQLyzytZ2GjpYYEgOq7drzyaGeYIL2GY8rm2C +ytHQxeo2OfSUESUb/sad9kBw2NXlA1AOi/9maES25+IxOGa0koBkRm8jmPPm5Wbe +h1zqWHIjNH3uaiPPZvgFqUL/boeuRDQ4cDjr8R3eHSAED+SwmnvSiJCFeMjGfHId +uc9k/L7F0l4RSs50WHFwzNXB4xebJnbwCUN1c/W4aBCew0k1vzXxVuwe2YpUoeGY +o0veNvKX5xKKNMhC6EJoVmjBDcXCOtN+F3GNvNaUO6JslC7nYAWxK5/CRUuICZaj +s5/+GaO7/rPC8vGnMGDw9aTOH7bISN+zHDHq9wIDAQABAoIBAQDKPSDEDO5OH8f/ +rPIqfEDsitzxeMtNfZAIQpVnadAugrmQDF/B2bTApXdyGQ3yH7jcWETyC+RNMrCo +Boesvlx11HYxt1QU5JlG3KEHveMBgEoS9mvvt7c0hFXogIkDx+T5maIwhoZAmLhV +Cmc5Ya/Cj52zDa2H30Zo96LMes2+kQ9IPpNFJevY1pBB2d+B9Tg6QOHLxSFXdJ4H ++XXmtAFUvO5bEAicsRlMvav7FPPK3o7i5FQ6JCL5nDNGDbHw72WxKDpbqlhZsFN9 +oIyx++4Vu94H3BE0b8UDcTQyF+V3TSjn9OXBKNsb8VcVt75HWw7A8iaSIJctofMh +v8jDRt/pAoGBAPgpwEEeJFLUOlH35IPOZ2MolnqnUzbwPW8VnzLk1PA9/8pqU8Xh +YljgOcI3hK755Pz3HTB8hQor6yTTR7lzIHGp3zGhAWw46qiqBzJVHzTGfols9i8b +2cx8ZUHkad4VpaB6KtKpfArfTkEk0QPNRFEYjg05mppqhfyG9bDV+HRrAoGBAPT9 +nBuEN98FzhyBJBWtTCdnkJh8Eqw2HzI5OHGwVCdYv3GnapWIHHVLr2N4s2+sL7xP +WuKfyosVDj5WrANmQtkwyFxkVBapptV8Bw84lAGuVOfea3c7lgA6Zj15ldiFMbHU +0LhBYTfqZu7+3OhHbV+nCrY/cexqGYD8JuePFSalAoGBANXpx1taTB1J62u0rzoe +tWf4GJ5plYWJ2KrkjHImZpcgGlm1BblQ6qGJxr/vc2QQ7J5RtMuSymtWKD96EB1/ +a7wOneH902giN8RjrAhq75dicrirQBqjez6VDAOcjNVu+3I1XKxyhAYrLx1gSvtn ++TeeXvRvbyEkKZLgEvD3wE85AoGANiPxorcWbcfno676XXv9r1uYvcn1im8vd7bj +fWRdRJC9Rg2cZU0+FMHUEaRz6wLfTbsvt5NefFv72NTokJvBvCOms5xMZPG698S/ +/qIfOzvecZtanm/hl01QmNdMwRu2PrlsIrv4ExZPBxP1l7NpPVE58cqVj4xm9HVE +17lsEC0CgYAWgcAkEr2mBQ7BtOJZmmweDRe2q6VOuPVgVzS3knzaN59FvCNeImU2 +Zmuz0fhiW1KSefOZ98AQA3Hl+uE06FEN5cJrI2qSnOkTJqyTc/x1Gi/rZLA0BWby +Th3eMMcnd7cpc8WDT5Dfg6YIwlw+OEIEXuxDzhIDej1BJDynR3izEA== +-----END RSA PRIVATE KEY----- diff --git a/package/key/packager-62fdf15d.rsa.pub b/package/key/packager-62fdf15d.rsa.pub new file mode 100644 index 0000000..3d36590 --- /dev/null +++ b/package/key/packager-62fdf15d.rsa.pub @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7X2j1S7QDmBUQLyzytZ2 +GjpYYEgOq7drzyaGeYIL2GY8rm2CytHQxeo2OfSUESUb/sad9kBw2NXlA1AOi/9m +aES25+IxOGa0koBkRm8jmPPm5Wbeh1zqWHIjNH3uaiPPZvgFqUL/boeuRDQ4cDjr +8R3eHSAED+SwmnvSiJCFeMjGfHIduc9k/L7F0l4RSs50WHFwzNXB4xebJnbwCUN1 +c/W4aBCew0k1vzXxVuwe2YpUoeGYo0veNvKX5xKKNMhC6EJoVmjBDcXCOtN+F3GN +vNaUO6JslC7nYAWxK5/CRUuICZajs5/+GaO7/rPC8vGnMGDw9aTOH7bISN+zHDHq +9wIDAQAB +-----END PUBLIC KEY----- diff --git a/package/tftp-hpa-5.2-r4.apk b/package/tftp-hpa-5.2-r4.apk new file mode 100644 index 0000000000000000000000000000000000000000..74f48e9eb76f2d1d5ea19b89179b9b2d78c99265 GIT binary patch literal 32074 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 L-Y-2Ovfc0MbW0DUj!+e zN{v=EY!dU5ufi?9q{PEj-qD=6Og|M$MVpXd;t3Wt zJAt|ZA#(^eVgFnOT^#`BwqN99$N3kA#Ni9g3i9AsL~2jatyT34hBdFOj19zgcdx=m zXz#1{Hj=p_jQ{n~rQ^=iKT!1AaxL9*rIV7sixSxrA#l_6rn`v{3wSab?BD+R_Nasv z`%+IwyIEQYD<8Kv$_^*`1^Kq;D>e5W2fo&n$4&D3=3a}N|0|+fJM4PZQK?43_VR9H zXlO`r&>l#T;0)m0d2&v_q~+u2at@{n;CCmh?J-jRcb?HvNbbkDa|+Lrp7?wIiIw*5 zT$-iqetzI7?2&`7>#0G~SUx}AgFH&*KAmXTRWTpn<#}d~zln@}8KUu71ocO*e9^FV z07b}R|pJ9Gf;pBPr$TDJu78#|Fnn%0AC%_)PF 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 JU^d`j{|83KdTjsz literal 0 HcmV?d00001 diff --git a/package/tftp-hpa-doc-5.2-r4.apk b/package/tftp-hpa-doc-5.2-r4.apk new file mode 100644 index 0000000000000000000000000000000000000000..f871f7153c33fc9514d84c2ba8661525d1ac360d GIT binary patch literal 9906 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 literal 0 HcmV?d00001 diff --git a/trq/trq.c b/trq/trq.c index 9ed58f3..27bec57 100644 --- a/trq/trq.c +++ b/trq/trq.c @@ -14,6 +14,7 @@ #include #include #include +#include void ts_free(ts_args *args) { @@ -29,7 +30,6 @@ void ts_free(ts_args *args) free(args->path_src); if (args->command) free(args->path_dst); - free(args); } } @@ -41,23 +41,17 @@ static char* ts_concat_path(const char *file) syslog(LOG_NOTICE, "TRQ Invalid value file (ts_concat_path)\n"); exit(3); } - const char *path_mac = "mac.cfg/"; - size_t len1 = strlen(path_mac); size_t len2 = strlen(file); - char *result = (char*) malloc(sizeof(char) * (len1 + len2 + 1)); - if (!result) { syslog(LOG_NOTICE, "TRQ Disk full or allocation exceeded (ts_concat_path)\n"); exit(3); } - strncpy(result, path_mac, (len1 + 1)); strncpy(result + len1, file, (len2 + 1)); - return result; } @@ -65,7 +59,6 @@ static char* ts_copy_string(const char *string) { if (!string) return NULL; - int len = strlen(string); char *tmp = (char*) calloc(1, sizeof(char) * (len + 1)); if (!tmp) @@ -74,7 +67,6 @@ static char* ts_copy_string(const char *string) exit(3); } strncpy(tmp, string, (len + 1)); - return tmp; } @@ -86,30 +78,43 @@ ts_args* ts_get_arguments(const char *filename, const char *path) syslog(LOG_NOTICE, "TRQ Disk full or allocation exceeded (ts_get_arguments)\n"); exit(3); } - char separator[2] = ";\0"; char *part = NULL; int len = strlen(filename); - + int next = 1; /* reading the next iteration */ char *tmp_filename = (char*) calloc(1, sizeof(char) * (len + 1)); if (!tmp_filename) { - syslog(LOG_NOTICE, "TRQ Disk full or allocation exceeded (ts_copy_string)\n"); + syslog(LOG_NOTICE, "TRQ Disk full or allocation exceeded (ts_get_arguments)\n"); exit(3); } strncpy(tmp_filename, filename, (len + 1)); - part = strtok(tmp_filename, separator); - while (part) { switch (args->size) { case 0: + regex_t regex; + regcomp(®ex, "^01-[0-9a-f]{2}(-[0-9a-f]{2}){5}$", REG_EXTENDED); + int reti = regexec(®ex, part, 0, NULL, 0); + if (reti) + { + syslog(LOG_NOTICE, "TRQ The MAC address was entered incorrectly (ts_get_arguments)\n"); + exit(100); + } args->file_dst = ts_copy_string(part); args->path_dst = ts_concat_path(part); break; case 1: + if (!strncmp("cr", part, 3)) {} + else if (!strncmp("rm", part, 3)) + next = 0; + else + { + syslog(LOG_NOTICE, "TRQ The command was specified incorrectly (ts_get_arguments)\n"); + exit(100); + } args->command = ts_copy_string(part); break; case 2: @@ -117,19 +122,21 @@ ts_args* ts_get_arguments(const char *filename, const char *path) args->path_src = ts_concat_path(part); break; default: + syslog(LOG_NOTICE, "TRQ Invalid request format (ts_get_arguments)\n"); + exit(100); } ++args->size; - part = strtok(NULL, separator); + if (next) + part = strtok(NULL, separator); + else + part = NULL; } - free(tmp_filename); - if (!args->size) { free(args); args = NULL; } - return args; }