1
0
mirror of https://github.com/dkmstr/openuds.git synced 2025-10-08 19:34:11 +03:00

525 Commits
v1.9 ... 2.2

Author SHA1 Message Date
Adolfo Gómez García
a0797ac07f Updated translations 2017-12-21 19:10:36 +01:00
Adolfo Gómez García
bbcc06f503 Fixes on RDP for Linux.
On linux client freerdp 1.1, seems that /home-drive with
/drive:media,/media and /printer makes the client fail. (Works fine with
2.0).
We have replaced so:
1.- Now by default, on linux, redirect drives redirects /media
2.- You can check "redirect home" so /home is also redirected (take
care, /home, not home folder)
3.- If you want /home-drives, you can include it on "custom parameters"
2017-12-21 19:04:06 +01:00
Adolfo Gómez García
6fbf419064 Updated translations 2017-12-20 12:28:52 +01:00
Adolfo Gómez García
cabc906758 Fixed a lof of transports string literals 2017-12-20 12:17:17 +01:00
Adolfo Gómez García
0b7535e76e Fixed string on x2go transport 2017-12-20 00:10:24 +01:00
Adolfo Gómez García
f536112312 Updated translations 2017-12-19 22:42:50 +01:00
Adolfo Gómez García
ab2ca6d527 Fixed text & descriptions for transports 2017-12-19 22:33:05 +01:00
Adolfo Gómez García
442b78ef2e Fixed smartcard parameter when empty 2017-12-19 13:52:20 +01:00
Adolfo Gómez García
9cfc348ee6 RDP aditions. 2017-12-18 12:48:15 +01:00
Adolfo Gómez García
0f1d1af736 RDP Transport fixes
* Now preferences are not for user, that is not useful. Now screen size,
color deppth, etc.. is selected on the transports.
* Preferences for RDP has been removed from "user preferences"
2017-12-15 12:33:15 +01:00
Adolfo Gómez García
6830d8db4e Fixed Client plugin version 2017-12-15 11:16:22 +01:00
Adolfo Gómez García
d8db218c6d * Updated linux agents to include "udsvapp"
* Fixed reloading of master key, to do it "less sensitive" to database connection errros
* Removed nonsense info log from storage
* Added "customCmd" for UDS vApp on linux
2017-12-14 15:17:46 +01:00
Adolfo Gómez García
81dd4e3b8c a little optimization 2017-12-12 19:42:09 +01:00
Adolfo Gómez García
9519c7c95b More fixes to scheduled actions. Now all should work as expected with start/end dates 2017-12-12 18:42:44 +01:00
Adolfo Gómez García
afa7cb8f39 Fixed another calendar issue 2017-12-12 18:04:47 +01:00
Adolfo Gómez García
dc640fd400 Added support so a deployed service can "ignore unused but assigned"
state. That is, UDS now can enforce the check to be ignored.
2017-11-29 12:50:54 +01:00
Adolfo Gómez García
76c822b015 Fixed RDPFile to split linux command lines correctly 2017-11-29 12:49:49 +01:00
Adolfo Gómez García
c7513328eb Smaill fix for authenticators list (so we can determine type) 2017-11-23 06:38:12 +01:00
Adolfo Gómez García
e5f0fcce69 Fixed SHUTOFF on OpenStack 2017-11-21 12:48:44 +01:00
Adolfo Gómez García
004acbab9a Fixing up thin thin plugin 2017-11-20 14:56:19 +01:00
Adolfo Gómez García
c566ec47a2 Fixes for thin thin plugin 2017-11-20 13:56:28 +01:00
Adolfo Gómez García
3e1a31954a * Added "requestLogoff", to be invoked before "user removal" of a
service
2017-11-20 01:01:52 +01:00
Adolfo Gómez García
ec5473d99f Fixed autoatrributes && rdp 2017-11-15 15:36:36 +01:00
Adolfo Gómez García
4cf62de3fd Fixing up encoders 2017-11-15 14:21:45 +01:00
Adolfo Gómez García
a43d6af237 Fixing up encoders/decoders 2017-11-15 13:11:34 +01:00
Adolfo Gómez García
f41f431f38 Added "hex" encoder if needed 2017-11-15 13:02:13 +01:00
Adolfo Gómez García
c5af877fce Fixed DBfile new "encoding-decoding' 2017-11-15 13:01:47 +01:00
Adolfo Gómez García
88dd6e7494 Fixed encoding to bzip2 2017-11-15 12:41:40 +01:00
Adolfo Gómez García
e69800ccd2 Fixing up removing ".encode(bzip2, base64, zip)" from strings for Python 3 compatibility 2017-11-14 14:51:26 +01:00
Adolfo Gómez García
b1ba02c1f3 Added support or "ignore ssl" cert to openstack (to allow self signed) 2017-11-13 09:23:02 +01:00
Adolfo Gómez García
cb13ac1617 Fixing up REST api for client access 2017-11-10 14:10:26 +01:00
Adolfo Gómez García
de051d99ac Small fix 2017-11-09 08:20:03 +01:00
Adolfo Gómez García
fa1e6a69e8 Added "minValue" (cosmetic) to memory & storage sizes on oVirt Service 2017-11-07 11:09:14 +01:00
Adolfo Gómez García
417ddc6d8d * Fixed calendar, so next execution updates correctly on calendar rule
edition
2017-11-06 10:56:35 +01:00
Adolfo Gómez García
238f08b7dd Fixed id on auth list on REST api 2017-11-03 12:13:32 +01:00
Adolfo Gómez García
739ee728d3 upgraded to 2.2 2017-10-30 10:24:45 +01:00
Adolfo Gómez García
c5b9233d4a Lots of new things
* Now we can have a short name for correct visualization of UDS Services
* We now can allow release services
2017-10-26 13:35:53 +02:00
Adolfo Gómez García
22a8933e82 Added "release" icon (trash) 2017-10-26 10:47:55 +02:00
Adolfo Gómez García
a185baccdd fixed so /rest is allowed 2017-10-25 13:45:22 +02:00
Adolfo Gómez García
2521f41e76 fixed so now Redirect To Https will redirect ALWAYS :) 2017-10-25 13:26:08 +02:00
Adolfo Gómez García
815de57b86 fixed executing 2017-10-19 14:27:17 +02:00
Adolfo Gómez García
428ddd493c * Fixed actor version
* Fixed run
2017-10-19 10:38:41 +02:00
Adolfo Gómez García
4de93ddf1f adapted "run" windows registry key value, so it contains also arguments 2017-10-19 08:07:45 +02:00
Adolfo Gómez García
e6b75e3807 Now, run allows the use of a full command line with parameters 2017-10-18 15:27:56 +02:00
Adolfo Gómez García
e835c018b4 Logs for debugging 2017-10-18 13:18:37 +02:00
Adolfo Gómez García
098620cd05 Fix 2017-10-17 13:20:20 +02:00
Adolfo Gómez García
214f9c397b Improved "ensureResponseIsOk" to detect non json responses... 2017-10-17 13:14:56 +02:00
Adolfo Gómez García
47ae741952 Fixed exception on "notifyReadyFromOsManager' 2017-10-16 19:06:41 +02:00
Adolfo Gómez García
907fad4a55 On 2.2 and later, we force the python executable to be "python2.7" on
linux platforms (except for thin udsclient, that will execute python)
2017-10-16 13:08:47 +02:00
Adolfo Gómez García
7c3e289a6b * Deadline now on its own method
* Removed deadline from notifyUrls. It was a nonsense :).
2017-10-16 12:15:46 +02:00
Adolfo Gómez García
1f5a647ff3 Deadline & Fake set to false
* Added deadline to notifyURLS
* Now Fake = False
2017-10-16 12:02:01 +02:00
Adolfo Gómez García
0eebe6a0a5 Fixed Removal of service without os manager on "logout" 2017-10-16 11:10:39 +02:00
Adolfo Gómez García
8aa1607fee Fixed auth log 2017-10-13 13:05:45 +02:00
Adolfo Gómez García
0aa1311836 Fixed small bug on "useEmptyCreds". In fact, not used but "bug" exists 2017-10-13 12:16:32 +02:00
Adolfo Gómez García
6d49ae6667 Fixed IP Machines service && "execute" method of action calendars 2017-10-12 01:23:02 +02:00
Adolfo Gómez García
e60a4bc8fa Added "udsvapp" possibility 2017-10-09 15:18:59 +02:00
Adolfo Gómez García
6e5b73c3b7 Catalan up to date 2017-10-09 09:21:23 +02:00
Adolfo Gómez García
ae4330fc9d Fixed custom spice error message on dashboard 2017-10-05 11:08:43 +02:00
Adolfo Gómez García
b7147661e7 * Fixed several translations && translations upgrade
* Also removed nonsense check for AD
2017-10-05 10:58:25 +02:00
Adolfo Gómez García
3c07d2f667 Several improvements to messages for transports, and minor client
scripts fixed

* Added custom error message for SPICE
* Remover "import QT" from NX client scripts
2017-10-04 11:30:29 +02:00
Adolfo Gómez García
f54d87a295 Fixed NX legacy password generator. The $ must not be scaped to "\$" :) 2017-10-04 11:26:16 +02:00
Adolfo Gómez García
13f97248f6 Fixed OSManager to allow:
1.- Posting "POST"-only messages through "GET" method. (Only basic
messages)
 2.- Allow notify login/logout for user services without os manager
2017-10-02 10:36:45 +02:00
Adolfo Gómez García
786945fcbf Fixiung up og 2017-09-29 12:33:03 +02:00
Adolfo Gómez García
1070b716a2 Fixiung up og 2017-09-29 12:10:21 +02:00
Adolfo Gómez García
ad1bf0fe0b Fixiung up og 2017-09-29 11:49:37 +02:00
Adolfo Gómez García
df70dd4fd8 Fixiung up og 2017-09-29 11:37:37 +02:00
Adolfo Gómez García
3038c545ce Fixiung up og 2017-09-29 11:09:35 +02:00
Adolfo Gómez García
8d3b28e3cb Fixiung up og 2017-09-29 11:05:29 +02:00
Adolfo Gómez García
c431e39d4a Fixiung up og 2017-09-29 11:04:13 +02:00
Adolfo Gómez García
770f2eef09 Fixing up og 2017-09-29 11:01:28 +02:00
Adolfo Gómez García
e702ff6bca Fixing up OpenGnsys 2017-09-29 10:02:44 +02:00
Adolfo Gómez García
c6cc1f2b43 x2go transport fix 2017-09-27 08:07:43 +02:00
Adolfo Gómez García
06f5184ddd Fixed OpenGnsys 2017-09-25 14:18:19 +02:00
Adolfo Gómez García
d5688116e3 Merge remote-tracking branch 'origin/v2.1' into v2.2 2017-09-21 15:49:39 +02:00
Adolfo Gómez García
1e6f806563 Added base support for Catalan 2017-09-21 15:49:17 +02:00
Adolfo Gómez García
08ed93121b Added base support for Catalan 2017-09-21 15:48:45 +02:00
Adolfo Gómez García
840cc57fdc Updated with 2.2 version of WinDomainOsManager 2017-09-21 15:37:25 +02:00
Adolfo Gómez García
1ec1104356 Fixed advanced "alt class" setting to be optional 2017-09-21 09:26:34 +02:00
Adolfo Gómez García
234eb98f0c Included support for retrieving secondary LDAP records so the
information can be completed
2017-09-20 10:14:05 +02:00
Adolfo Gómez García
fa7ab534a3 Updated openGnsys 2017-09-19 08:33:24 +02:00
Adolfo Gómez García
ee661461a5 Fixed windows domain "release", so if domain is not found can be easyly
identified
2017-09-19 08:32:51 +02:00
Adolfo Gómez García
aecf6854a4 Fixed Domain Os Manager for 2017-09-18 14:13:49 +02:00
Adolfo Gómez García
34cd90f9a1 Fixed macosx CoRD transports && backported OpenGnsys 2017-09-18 08:33:17 +02:00
Adolfo Gómez García
201fb8ff9b A couple of cosmetic fixes 2017-09-13 14:31:41 +02:00
Adolfo Gómez García
d071f86c31 Updated filesaver version 2017-09-13 08:26:51 +02:00
Adolfo Gómez García
1c133eacd0 Fix for Windomain 2017-09-13 08:22:10 +02:00
Adolfo Gómez García
89ed019788 Fixed WinDomainOsManager to, in case of several servers actin as DC, look for the machine on all of them 2017-09-07 15:05:44 +02:00
Adolfo Gómez García
9930f4323c Small fix for windomain os manager, to better inform on errors adding to
group.
2017-09-04 18:12:03 +02:00
Adolfo Gómez García
115beefa8a Fixed RDP TRansport to leave enabled by default clipboard redirection, for backward consistence 2017-09-01 13:05:27 +02:00
Adolfo Gómez García
611f3590e6 Added clipboard enabling/disabling on transport 2017-09-01 12:37:13 +02:00
Adolfo Gómez García
59635839cf Added check so we cannot use "no credentials" with an sec that is not rdp and set default sec level to "rdp" for html5 transport 2017-09-01 12:36:39 +02:00
Adolfo Gómez García
4853729d7c Merge remote-tracking branch 'origin/v2.1' into v2.2 2017-08-04 15:19:58 +02:00
Adolfo Gómez García
e46b0d22e7 Now thinstation package is functional with gtk 2017-08-04 15:19:06 +02:00
Adolfo Gómez García
a8b3b80f75 Merge remote-tracking branch 'origin/v2.1' into v2.2 2017-08-02 16:21:14 +02:00
Adolfo Gómez García
085b0c1393 Fixed Transport to remove references on scripts to Qt 2017-08-02 16:20:52 +02:00
Adolfo Gómez García
e257ca0571 First working (but already non functional) "thin plugin" for thinstation
(and any other linux also ;-) )
2017-08-02 16:20:25 +02:00
Adolfo Gómez García
29e062ba5d Small Fix, so UDS client gets an exception in case of UDS being unable
to identify client platform.
2017-08-02 16:08:46 +02:00
Adolfo Gómez García
2b9cd5508d * Advancing on "thin plugin" for UDS 2017-08-02 15:53:18 +02:00
Adolfo Gómez García
e5a6916109 Fixing up for 2.2 future release 2017-07-27 14:12:45 +02:00
Adolfo Gómez García
6a3093c49d Fix for miniamal server version to use "old method" 2017-07-27 14:04:36 +02:00
Adolfo Gómez García
498154ffb1 Updated version & Initial 2.2 uds client fix so it will support signed scripts 2017-07-27 14:01:04 +02:00
Adolfo Gómez García
79a591180d Removed "sec:rdp" from Linux xfreerdp client 2017-07-26 15:08:33 +02:00
Adolfo Gómez García
1e711eecbb Updated "update" date :) 2017-07-21 07:46:13 +02:00
Adolfo Gómez García
7da01597e6 Enabled HTML5 file sharing as experimental feature 2017-07-20 12:20:19 +02:00
Adolfo Gómez García
2e4bd4b1db * Fix on recovering v1 WindDomainOsManager
* Added support for "strange" groupnames (with parentheses, quotes, ...)
2017-07-17 12:14:35 +02:00
Adolfo Gómez García
f3f936e401 Improvements for Windows domain os manager (now we can add the machine to a group on creation) 2017-07-14 14:48:18 +02:00
Adolfo Gómez García
90ed08c779 Added a feature so in windows we can have a custom "RunOnce" mechanics
so we can include a custom call if needed.
2017-07-11 21:24:56 +02:00
Adolfo Gómez García
c2874e74c8 added some RDP 2017-07-06 12:35:06 +02:00
Adolfo Gómez García
3a11c9832f Fixed post-script for windows 2017-07-03 14:07:44 +02:00
Adolfo Gómez García
0f6ffb559b Fixed HTML5RDP files upload (commented anyway right now) 2017-07-03 10:37:58 +02:00
Adolfo Gómez García
4769d7dc51 Added more REST API samples 2017-06-29 11:56:45 +02:00
Adolfo Gómez García
4fc2e98313 small fix for REST1 sample 2017-06-29 10:36:36 +02:00
Adolfo Gómez García
09a48c9c5a added usage list to providers 2017-06-20 08:11:41 +02:00
Adolfo Gómez García
ac245e71e9 fix for AD machine removal 2017-06-16 09:56:58 +02:00
Adolfo Gómez García
e5d2c711ce Fixed for 2.1 finsl 2017-06-13 08:08:00 +02:00
Adolfo Gómez García
de5e7380c4 Added a few "pretty" enhacements... 2017-06-08 11:31:47 +02:00
Adolfo Gómez García
3e87c90c67 Added fast admin navigation links 2017-06-08 11:10:39 +02:00
Adolfo Gómez García
4a97872cdd Added usage info 2017-06-08 11:02:34 +02:00
Adolfo Gómez García
19e67f5a18 Updated translations 2017-06-06 13:16:03 +02:00
Adolfo Gómez García
3e7c01f7f9 Added security option for HTML5 2017-06-06 12:18:41 +02:00
Adolfo Gómez García
0bda00e43d Added "custom parameter" for xfreerdp 2017-06-05 10:58:45 +02:00
Adolfo Gómez García
fe18faa863 Thistation 2017-06-05 09:55:12 +02:00
Adolfo Gómez García
808c715710 Added POST-CMD support 2017-06-01 12:25:48 +02:00
Adolfo Gómez García
16d458bb69 Fixed locales 2017-06-01 11:38:03 +02:00
Adolfo Gómez García
22a7e2336e Added config var for convert usernames to lowercase... 2017-06-01 09:35:43 +02:00
Adolfo Gómez García
f773cb5ecc Advancing on thin client & thinstation 2017-05-31 15:34:50 +02:00
Adolfo Gómez García
d1b6891ca7 Creating new "thin" uds client connector 2017-05-31 12:07:13 +02:00
Adolfo Gómez García
a9e65975c5 * Fixed X-Forwarded-Proto (was X-Forwarded-Protocol before...)
* Added "fix" on HTML5 javascript so it can fix the uds actor client
2017-05-26 10:55:47 +02:00
Adolfo Gómez García
c1377255b5 Added comment to metagroup groups combo 2017-05-24 11:52:58 +02:00
Adolfo Gómez García
cce8fa4869 Added double Crypt Method authentication 2017-05-24 10:23:16 +02:00
Adolfo Gómez García
dda1018901 fixed " on group names 2017-05-23 20:11:45 +02:00
Adolfo Gómez García
b44d02dbd9 Fixed tunnel wait 2017-05-22 14:16:38 +02:00
Adolfo Gómez García
cfded58563 Fixed 0x01 for 0x05 on cryptdata for windows rdp 2017-05-19 19:36:07 +02:00
Adolfo Gómez García
8642f4291b added pygtk dependencie to thinstation 2017-05-19 18:45:41 +02:00
Adolfo Gómez García
e83ff8d69d Fixed log to be INFO 2017-05-18 13:13:37 +02:00
Adolfo Gómez García
16edf04f1d Updated build packages 2017-05-18 12:39:30 +02:00
Adolfo Gómez García
cbaa5cef46 Fixed error on udsclient for Linux that was creating the log file on
/tmp instead of home user folder
2017-05-18 12:36:05 +02:00
Adolfo Gómez García
da75dc79a7 Fixed OpenStack error information 2017-05-17 11:55:18 +02:00
Adolfo Gómez García
9965be5a76 Fixed MAC address to uppercase on Free & OpenStack 2017-05-16 14:49:34 +02:00
Adolfo Gómez García
9d6f3111da Adding thinstation stuff 2017-05-16 13:30:47 +02:00
Adolfo Gómez García
9265ab3ac3 Fixed symlinks 2017-05-16 09:37:14 +02:00
Adolfo Gómez García
34e70394e9 Updating directory structure 2017-05-16 09:30:52 +02:00
Adolfo Gómez García
3a750018e2 New "thin uds client" 2017-05-16 09:22:10 +02:00
Adolfo Gómez García
390eea5c3d Fixed translations 2017-05-13 18:27:31 +02:00
Adolfo Gómez García
dbf94b4c17 Fixed a couple of things 2017-05-13 18:24:59 +02:00
Adolfo Gómez García
bc8b2de151 Enable usb redir added 2017-05-13 18:21:26 +02:00
Adolfo Gómez García
b73408043e Commented openstack volume availability for publishing only if not in
use.
2017-05-09 17:49:59 +02:00
Adolfo Gómez García
2ba6e4fa7c Updated locales & fixed usage summary report 2017-05-09 10:17:32 +02:00
Adolfo Gómez García
9bbd7fd57d Split usb sharing & auto new usb sharing into two options 2017-05-09 08:35:17 +02:00
Adolfo Gómez García
0ec3cb104a Fixed reversed options on spice transport 2017-05-09 08:25:22 +02:00
Adolfo Gómez García
b1f1d6701e removed log 2017-05-08 09:32:21 +02:00
Adolfo Gómez García
d54b447bf7 Added "allow" smartcard redirection also, and added an small fix for
"usb sharing"
2017-05-05 14:00:44 +02:00
Adolfo Gómez García
6ca7c5fb34 Enable USB Auto Sharing controled by UDS Transport now 2017-05-05 13:43:00 +02:00
Adolfo Gómez García
ca9ad5efbd Seems that opennebula allows "spaces" on imagenames???. Fixed this removing it, and enhaced error notification in case of an image not found 2017-05-05 09:25:54 +02:00
Adolfo Gómez García
b5154cbbe9 added report for UPC 2017-05-05 01:43:19 +02:00
Adolfo Gómez García
a3ad88b9e6 Removed "adminitrative" permissions (left just full access, the other
was in fact an synonim)
2017-05-03 14:30:51 +02:00
Adolfo Gómez García
a4b9bf1fb9 Added new report for UPC 2017-05-03 12:30:59 +02:00
Adolfo Gómez García
a95684d864 Fixed tunWait 2017-04-20 19:24:28 +02:00
Adolfo Gómez García
6057e8a3f8 Removed unusefull exception log :) 2017-04-19 13:32:18 +02:00
Adolfo Gómez García
4fbbfb8d10 Added possible support for personalized logout url on login form 2017-04-19 13:24:32 +02:00
Adolfo Gómez García
2daafa2c4a Added "allow cross domain logins" as comment to login view 2017-04-19 10:26:18 +02:00
Adolfo Gómez García
846489244e Fixed removal of users & authenticators 2017-04-18 14:24:22 +02:00
Adolfo Gómez García
ec33b46848 Removed trying to get opener StorageSession, as UDS will never do that, and under some cirtustances it may fail (for exmple, if using UDS API for getting a connection from a cross domain 2017-04-18 13:39:31 +02:00
Adolfo Gómez García
e067f09958 Fixed added by Gliphtodown backported to 2.1 2017-04-18 00:32:27 +02:00
Adolfo Gómez García
8cbfcbb104 Removed "annoying" messages on log when need to retry database accesss 2017-04-17 22:52:31 +02:00
Adolfo Gómez García
2b5cf494db backported pom.xml from 2.5 2017-04-10 02:43:24 +02:00
Adolfo Gómez García
39158bd7ae Removed download for Microsoft old RDP app 2017-04-10 01:43:42 +02:00
Adolfo Gómez García
95a695ee88 Fixed mac os x virt-viewer download url 2017-04-07 12:00:08 +02:00
Adolfo Gómez García
a860732ed2 small visual fix 2017-04-06 20:32:08 +02:00
Adolfo Gómez García
5d391a9fc4 Added exception log on case of invalid 2017-04-04 10:01:01 +02:00
Adolfo Gómez García
148cd249cd If removing takes too long, mark it as errored 2017-04-03 10:24:27 +02:00
Adolfo Gómez García
57e643333e Fixed TRanslations
Fixed SPICE name
2017-03-31 10:37:16 +02:00
Adolfo Gómez García
5794fab7da By default, on 2.1, linux machines will do a reboot after configure. 2017-03-31 10:23:39 +02:00
Adolfo Gómez García
9955e7bcff Fixed tunneled access for SPICE for opennebula (no secure port, no need
of channel config...)
2017-03-30 23:05:15 +02:00
Adolfo Gómez García
86b252916c Set ready to y so initial wait is not done 2017-03-29 13:33:39 +02:00
Adolfo Gómez García
e81a8fdc5f Fixed ovirt.. 2017-03-29 13:02:17 +02:00
Adolfo Gómez García
92cf8c36bd fixed ou with spaces 2017-03-29 10:53:34 +02:00
Adolfo Gómez García
de07a4f3cd Another small fix 2017-03-28 15:20:23 +02:00
Adolfo Gómez García
320a530bbc Several fixes so we can check availability of spice transport BEFORE
user tries to access it.
2017-03-28 15:12:14 +02:00
Adolfo Gómez García
e945ad9fe8 A couples of fixes for opennebula 2017-03-27 10:35:53 +02:00
Adolfo Gómez García
be3c242a7d Added delay on actor EINTR 2017-03-23 13:55:32 +01:00
Adolfo Gómez García
f86712a05a ignore EINTR on connection error 2017-03-23 09:58:36 +01:00
Adolfo Gómez García
777ca4c016 Keep running on case of commmunitacion error with uds server... 2017-03-23 09:40:56 +01:00
Adolfo Gómez García
f715f48a7b * Now if notifyReadyFromOsManager raises an error, puts the machine on
"error" state
* Fixed L2 cache on oVirt, that was not working correctly con 4.x
versions
2017-03-22 15:04:19 +01:00
Adolfo Gómez García
315dd77a5a Ovirt publication now take into account removed 2017-03-22 13:10:10 +01:00
Adolfo Gómez García
82f7f56590 Another small typo 2017-03-22 12:32:20 +01:00
Adolfo Gómez García
8e594c7c7f Fixed indent 2017-03-22 12:30:34 +01:00
Adolfo Gómez García
e99c77a97f fix for ovirt python sdk types 2017-03-22 12:03:11 +01:00
Adolfo Gómez García
a80fc629a2 Backported ovirt cleanups from 2.5 to 2.1 2017-03-22 11:55:39 +01:00
Adolfo Gómez García
8b644d4fec Removed "free old macs??" 2017-03-22 11:26:38 +01:00
Adolfo Gómez García
17196ac31d Fixed 404 error on oVirt access 2017-03-22 10:01:20 +01:00
Adolfo Gómez García
632bb3e6d4 Fixed openstack support for newer versions 2017-03-21 15:46:13 +01:00
Adolfo Gómez García
def1c59e4c Added CredSSP Support parameter to transport 2017-03-20 21:17:48 +01:00
Adolfo Gómez García
e90e56c426 Set enablecredsspsupport to 0 to allow windows10->windows10 connections
to work under some circustances...
2017-03-17 13:29:36 +01:00
Adolfo Gómez García
5f1676e56b Added usb support workaround for 4.0 & 4.1 of ovirt 2017-03-17 10:05:03 +01:00
Adolfo Gómez García
72230c5a60 Fixed linux actor with KDE
Removed temporally usb support for 4.x until a fix/workaround is found
2017-03-16 15:33:36 +01:00
Adolfo Gómez García
fad5eca5b9 Fixed cord tunneled access for rdp 2017-03-15 09:57:13 +01:00
Adolfo Gómez García
8054f088b9 Added custom message text for calendar limitation 2017-03-14 13:45:38 +01:00
Adolfo Gómez García
544b8b7b25 Locales 2017-03-10 13:24:07 +01:00
Adolfo Gómez García
4d6f54f54c fixed tunnel wait 2017-03-10 10:00:34 +01:00
Adolfo Gómez García
2004f4f882 Added "preconnect" script for Linux 2017-03-09 17:34:28 +01:00
Adolfo Gómez García
08e33ee20e Fixed RDP tunnel 2017-03-08 17:01:44 +01:00
Adolfo Gómez García
330973ac30 * Fixed calendars "required" fields not being honored
* Fixed open nebula "volatile" disks
2017-03-07 10:26:47 +01:00
Adolfo Gómez García
f78c755f12 Several fixes for XenServer and L2 Cache... 2017-03-06 14:17:07 +01:00
Adolfo Gómez García
bbc2cdfa30 Fixed Opennebula & Xen connectors 2017-03-06 12:26:47 +01:00
Adolfo Gómez García
d566285098 Minor fixes 2017-03-06 08:40:22 +01:00
Adolfo Gómez García
4c7b48588f Fixed ovirt 4 client "unicode" problems :)
*
2017-03-03 11:03:09 +01:00
Adolfo Gómez García
22313a517f Small opennebula fix for better control of certain situations... 2017-03-03 08:30:24 +01:00
Adolfo Gómez García
0c7a4911d2 Small message fix 2017-03-02 22:34:33 +01:00
Adolfo Gómez García
f11bccc868 Last fixes for OpenNebula (now correctly detect "done" VM State) 2017-02-28 11:38:17 +01:00
Adolfo Gómez García
c62e90f0a1 Small fix for better cancel on opennebula 2017-02-28 10:28:35 +01:00
Adolfo Gómez García
170319f871 Fix for very very weird situation (invalid argument in case no OS was
detected...)
2017-02-27 08:11:46 +01:00
Adolfo Gómez García
c6dd782150 * Fixed webLogout if we accesed UDS using ticketing system 2017-02-27 07:57:47 +01:00
Adolfo Gómez García
cc7740bafb Translation Fix 2017-02-27 07:45:38 +01:00
Adolfo Gómez García
1626fe96b1 Fixed getting password for access spice from OpenNebula 2017-02-22 13:32:28 +01:00
Adolfo Gómez García
efbca46af9 small typo 2017-02-22 12:51:32 +01:00
Adolfo Gómez García
548f44b1a7 last fixes 2017-02-22 12:30:02 +01:00
Adolfo Gómez García
2664be7ec4 fixes for linux actor 2017-02-22 11:49:42 +01:00
Adolfo Gómez García
bd3d0dd006 Minor fixes for actor for linux 2017-02-22 10:38:27 +01:00
Adolfo Gómez García
a83e218679 * Fixed use of Spice over OpenNebula
* Minor cosmetic fixes :)
2017-02-21 14:51:25 +01:00
Adolfo Gómez García
8ee34cd42b Coherence 2017-02-17 14:12:43 +01:00
Adolfo Gómez García
1ad57ee70c Simple fix 2017-02-17 14:11:58 +01:00
Adolfo Gómez García
c9ab76c19c Added infor message for multple join :) 2017-02-14 13:35:30 +01:00
Adolfo Gómez García
217655c276 Fixes for joining domains in multi steps using key from registro (HKEY_LOCAL_MACHINE\Sotware\UDSEntepriseActor, value "join" of type string must contain "old" (remenber that in 64 bits, this key can be under WOW3264Node) 2017-02-14 12:05:36 +01:00
Adolfo Gómez García
57d1041f87 Fixed DBFile not found on "url" method 2017-02-14 09:53:41 +01:00
Adolfo Gómez García
b56bf7b13f updated translations 2017-02-13 17:28:27 +01:00
Adolfo Gómez García
3a137213a7 * Fixed mistake on osmanager dashboard template
* Added "custom string" to Linux Clients using xfreerdp client for
printer & smartcard
2017-02-13 16:58:35 +01:00
Adolfo Gómez García
90cb224c9a Translations fixes 2017-02-09 20:03:39 +01:00
Adolfo Gómez García
69ad1baa7d Translations fixes 2017-02-09 20:01:15 +01:00
Adolfo Gómez García
6d2dee2664 Removed "print" 2017-02-09 07:52:30 +01:00
Adolfo Gómez García
ace11fd77a Added timeout to RDP Tranpsort & little fix for OpenNebula access using SPICE 2017-02-08 11:23:52 +01:00
Adolfo Gómez García
afa6f62daa Some additions yo HTML5 transport 2017-02-02 15:35:27 +01:00
Adolfo Gómez García
6c8f9affc2 Addedl length to name (128 max) 2017-02-02 14:10:52 +01:00
Adolfo Gómez García
fa0acb6a1a Locale updates (included arabian translation) 2017-02-02 00:26:21 +01:00
Adolfo Gómez García
4fa7d26191 Minor text upgrades 2017-02-02 00:15:23 +01:00
Adolfo Gómez García
e22f489038 added temporary storage in memory for stlite 2017-01-30 10:57:35 +01:00
Adolfo Gómez García
11100e3fda Enhanced performance on sqlite 2017-01-30 10:41:32 +01:00
Adolfo Gómez García
047eac18a7 added trace file for connections checking tracing 2017-01-26 06:26:45 +01:00
Adolfo Gómez García
32b5354a15 fixed meta group information 2017-01-25 12:28:28 +01:00
Adolfo Gómez García
0d085ba708 Fixed RDP to add "font smoothing" capability
Fixed users_groups metagroups information
2017-01-25 10:49:27 +01:00
Adolfo Gómez García
d184f0eec3 Updated css for administration, now it easy access elements 2017-01-25 05:42:53 +01:00
Adolfo Gómez García
675d502f73 Added information for groups 2017-01-24 09:56:01 +01:00
Adolfo Gómez García
4268004fcf Added information button (and information) to users, so certain information can be found more easily 2017-01-23 11:45:01 +01:00
Adolfo Gómez García
aabc5540d0 Fixes for several user text so the can be better understand 2017-01-20 11:01:39 +01:00
Adolfo Gómez García
68806c6366 Removed check of FQDN from domain 2017-01-20 09:40:28 +01:00
Adolfo Gómez García
343fed3245 Fixed & updated translations 2017-01-20 05:34:55 +01:00
Adolfo Gómez García
c740457860 Fixed doing "pkill" in correct session logout (only needs to do this on session timeout and persistent machines...) 2017-01-19 12:46:22 +01:00
Adolfo Gómez García
1d417c6075 Removed pkill right now 2017-01-19 11:02:33 +01:00
Adolfo Gómez García
ec7d3d39bd Fixed a lot of things from javi 2017-01-17 11:17:55 +01:00
Adolfo Gómez García
2e98197376 Fixed to x2go transport 2017-01-10 17:19:29 +01:00
Adolfo Gómez García
df17a86820 Added a Physical "single machine" service to physicals machines
provider.
Fixed textbox admin template to honor "required"
2016-12-02 12:13:46 +01:00
Adolfo Gómez García
54c751e4c5 Removed "files" from actors' debian files (redundant? :) ) 2016-12-02 08:21:01 +01:00
Adolfo Gómez García
151d35459e Added execution of script on /etc/udsactor/post on Linux Actor after
getting "ready" on machine...
2016-11-28 09:47:31 +01:00
Adolfo Gómez García
1ae22ff249 Fixing opennebula password spice access 2016-11-24 10:06:25 +01:00
Adolfo Gómez García
983114af88 Updated translations 2016-11-24 09:55:04 +01:00
Adolfo Gómez García
8a828bd087 For testing experimental SPICE support on opennebula 2016-11-23 10:13:10 +01:00
Adolfo Gómez García
76fc938604 Added limitation for users authenticated using tickets. (Tickets are
used from external apps to provide acces to one machine, but not to
provide access to all platform...)
2016-11-22 11:09:49 +01:00
Adolfo Gómez García
c08cb38dbc Fixing tunneled access for ovirt in case there is only "secure port" and
no "unsecure port"....
2016-11-21 16:49:37 +01:00
Adolfo Gómez García
f5dcb73e33 Fixed for mysql 5.7 2016-11-17 14:18:50 +01:00
Adolfo Gómez García
4108cf4df7 Added to enumeate by default images, templates & vms of user & his
group.
2016-11-10 11:38:05 +01:00
Adolfo Gómez García
f33c536adf Minor cosmetic changes 2016-11-07 03:03:12 +01:00
Adolfo Gómez García
a66b36e142 Finished with x2go? (more tests to go, but seems good right now...) 2016-11-07 02:59:38 +01:00
Adolfo Gómez García
c9bff899ba Added "experimental" to x2go transports 2016-11-07 02:36:46 +01:00
Adolfo Gómez García
82097b67f4 X2Go Working on linux & Windows 2016-11-07 02:35:23 +01:00
Adolfo Gómez García
3a58e0e446 * Fixed calendar rules with 0 interval
* Running X2Go direct connection from windows
* fixed Actor to notify correctly listening address on ip chang
2016-11-02 10:30:19 +01:00
Adolfo Gómez García
5ce61e1f98 Fixed "0" interval rules, that could hang UDS index page & consume all
memory
2016-10-31 12:55:56 +01:00
Adolfo Gómez García
5af198db75 More fixes (in fact, fixing fixes... :P) for actors 2016-10-27 08:25:30 +02:00
Adolfo Gómez García
1f6279cd46 Replaced REST listener address to listen on 0.0.0.0 so we do not need to
reassing listener on case of ip change of VM.
2016-10-27 08:05:01 +02:00
Adolfo Gómez García
a07f1d5b24 Advancing on x2go implementation 2016-10-24 16:59:29 +02:00
Adolfo Gómez García
26c0532fd5 first injection test seems to work 2016-10-23 22:09:32 +02:00
Adolfo Gómez García
9901bc2c8f *Updating linux client
* Updating x2go
2016-10-23 21:20:31 +02:00
Adolfo Gómez García
715957feb2 Some advances on x2go 2016-10-20 10:00:09 +02:00
Adolfo Gómez García
c7dc1e8b81 advancing on x2go support 2016-10-19 11:54:12 +02:00
Adolfo Gómez García
00798e5927 Merge remote-tracking branch 'origin/v2.0' into v2.1 2016-10-14 10:59:12 +02:00
Adolfo Gómez García
92c3fbd827 Update checkuuid timeout from 2 to 5 2016-10-14 10:58:41 +02:00
Adolfo Gómez García
a68837bf4b fixed new sub-menus for tranports 2016-10-14 09:30:04 +02:00
Adolfo Gómez García
387b7f51d4 * Added support for multi-level new menu items (for transport for
example, they are going too long...)
* Fixed all transports to include group
2016-10-14 08:17:52 +02:00
Adolfo Gómez García
649a3515fc Added backport of x2go development branch for 2.1 version 2016-10-14 06:52:15 +02:00
Adolfo Gómez García
fe8f8be1d8 Merge remote-tracking branch 'origin/v2.0' into v2.1 2016-10-14 06:51:29 +02:00
Adolfo Gómez García
ea49e18f80 Now in case of connection error on checkuuid, the result will be that the check is correcot 2016-10-14 06:51:10 +02:00
Adolfo Gómez García
cd9f9ad523 updated changelod for uds debian based actors 2016-10-11 08:02:43 +02:00
Adolfo Gómez García
bba494cdc0 Merge remote-tracking branch 'origin/v2.0' into v2.1 2016-10-11 07:57:39 +02:00
Adolfo Gómez García
393819bc94 backported fix from 2.1 2016-10-11 07:53:31 +02:00
Adolfo Gómez García
49e3f72d89 Finishing up fixes... 2016-10-10 22:16:41 +02:00
Adolfo Gómez García
a266cdaeff Fixing on Linux getting mor than one XScreenSaverAllocInfo (too many
clients error with time...)
2016-10-10 22:03:19 +02:00
Adolfo Gómez García
43bf2de385 Small fix for actor timeout detection on centos 7 2016-10-10 21:43:50 +02:00
Adolfo Gómez García
447dc23914 Fixed 2.1 version 2016-10-10 08:35:56 +02:00
Adolfo Gómez García
49aaaedbe9 Backporting transport limitation by connecting os 2016-10-10 08:31:32 +02:00
Adolfo Gómez García
7892a196ac Adapting v2.1 2016-10-10 07:52:03 +02:00
Adolfo Gómez García
7ab956fa4a minor fixes 2016-10-10 07:37:41 +02:00
Adolfo Gómez García
17044d38bd Improvement on ready setting logged in counter to 0 2016-10-03 14:23:19 +02:00
Adolfo Gómez García
0dc461c30b Fixed setPropert 2016-10-03 13:42:24 +02:00
Adolfo Gómez García
ced5e06ff0 Added a counter posibility to login-logout 2016-09-19 16:14:54 +02:00
Adolfo Gómez García
5e848cbc8c Fixed defvalue from 4 to 3 for ovirt, so migrations works fine from 1.9 to 2.x 2016-09-11 23:02:57 +02:00
Adolfo Gómez García
f924604217 Backport for ovirt 4.0 2016-09-11 22:21:12 +02:00
Adolfo Gómez García
efc59c0124 fixed unresolved imports 2016-09-11 22:15:04 +02:00
Adolfo Gómez García
2eaa447155 Includede persistent machines check idle also. 2016-09-07 16:49:40 +02:00
Adolfo Gómez García
3528424892 Fixed meta gruoups edition 2016-08-25 13:21:16 +02:00
Adolfo Gómez García
2eef7222d5 Backported guacamole for 2.0 availability 2016-08-17 20:39:37 +02:00
Adolfo Gómez García
0d28a5b5f7 Backported guacamole for 2.0 availability 2016-08-17 20:38:56 +02:00
Adolfo Gómez García
e0e7e26234 Fixed Translations 2016-07-28 13:33:28 +02:00
Adolfo Gómez García
2674563535 Fixed template config removal on publication failure 2016-07-27 18:22:37 +02:00
Adolfo Gómez García
a864fbac96 Publication now will correctly fail if the template cannot be cloned 2016-07-27 17:33:45 +02:00
Adolfo Gómez García
51c32a4350 Fixed for OpenNebula 5 (seems to work fine with 4 & 5 right now) 2016-07-26 16:29:40 +02:00
Adolfo Gómez García
ec95f27ee6 Updated translations && added server-keyboard-layout to guacamole 2016-07-26 13:44:36 +02:00
Adolfo Gómez García
15ce5aa938 Added failsafe to html5 keyboard 2016-07-26 12:58:56 +02:00
Adolfo Gómez García
39b353fb24 More Fixes 2016-07-22 17:57:45 +02:00
Adolfo Gómez García
7a0c8aa977 More Fixes for OpenNebula 4.x (for new API implementation) 2016-07-22 17:40:03 +02:00
Adolfo Gómez García
664418d4dc More fixes for OpenNebula 2016-07-22 16:54:09 +02:00
Adolfo Gómez García
381cf47abf * Fixed RDP to allow some optional parameters on linux clients
* dixed OpenNebula support
2016-07-21 13:51:31 +02:00
Adolfo Gómez García
1578c92a88 Adding support for OpenNebula 5.0 2016-07-18 20:12:38 +02:00
Adolfo Gómez García
6827380e99 Added - to title for xfreerdp 2016-07-15 15:33:44 +02:00
Adolfo Gómez García
62f637790c Fixed changelog of publications not being displayed on dashboard 2016-07-12 11:33:50 +02:00
Adolfo Gómez García
bf5311b5af Added sessions cleanup to scheduled task list 2016-07-12 01:29:00 +02:00
Adolfo Gómez García
d0e0418ede Fixed check due 2.0 just works only with opennebula 4.x due to api
changes on 5.x. 2.1 will cover both vversions
2016-07-11 22:16:46 +02:00
Adolfo Gómez García
243cbbfd4b Fixed log removal for cache & assigned services admin tables 2016-07-11 22:04:58 +02:00
Adolfo Gómez García
e7984d5a8e Fixed javascript error 2016-07-11 14:14:10 +02:00
Adolfo Gómez García
eacce7adda fixed images on chrome 2016-07-11 13:44:27 +02:00
Adolfo Gómez García
622e8629ff Fixed image removal on service pool group 2016-07-11 12:43:22 +02:00
Adolfo Gómez García
50e368ee7a * Added owner to dbfile, so we can remove later them selectively
* Fixed samples
2016-07-10 20:56:32 +02:00
Adolfo Gómez García
6766fe41fe Signed-off-by: Adolfo Gómez García <dkmaster@dkmon.com> 2016-07-09 02:59:55 +02:00
Adolfo Gómez
ba35968e8d Forgotten comma 2016-07-07 14:22:35 +02:00
Adolfo Gómez García
4adfac1c02 added comments field to index view 2016-07-07 13:10:18 +02:00
Adolfo Gómez García
437865b278 * Fixed a bug on Services Pool Groups Images
* Fixed a couple bugs on OpenNebula"
2016-07-05 15:40:26 +02:00
Adolfo Gómez García
793b6c9004 Fixed RDP to allow freerdp from linux to select audio controller 2016-06-24 11:10:53 +02:00
Adolfo Gómez García
96bd117622 Comment fix 2016-06-15 00:58:33 +02:00
Adolfo Gómez García
8b2df76582 Small fix so HTML5 Transport remove leading/trailing whitespaces 2016-06-13 11:39:07 +02:00
Adolfo Gómez García
4196883bfb Fixed Timings on uds Actor
Fixed oVirt to allow USB Configuration on service (for spice). Defaults to not allow.
2016-06-04 20:02:34 +02:00
Adolfo Gómez García
8585d10623 Again, fixing deadline... 2016-06-02 09:57:43 +02:00
Adolfo Gómez García
c715b92ed0 fixed getDeadline 2016-06-01 11:12:12 +02:00
Adolfo Gómez García
a3726399f1 Fixed Calendars access restrictions 2016-05-31 12:04:53 +02:00
Adolfo Gómez García
8ce3efc7ee Fixed to allow 2.0 to work with 1.9 windows actor 2016-05-30 09:33:53 +02:00
Adolfo Gómez García
0bd3e1ac72 * Added alert icon for calender restricted services
* Fixed spice to add fullscreen support on transport definition & a bug
to allow using it.
* Fixed OS Detector to include "unknown" as an os on "all OSs"
2016-05-27 13:39:51 +02:00
Adolfo Gómez García
c2d4e995e7 Fixes & tests on UDS Actor for honoring max session duration (got from
calendars)
2016-05-24 07:40:53 +02:00
Adolfo Gómez García
1b71fef8b4 Fixed about to include build version && also upgraded it a bit 2016-05-20 13:34:53 +02:00
Adolfo Gómez García
074a4d525d Fixed up about dialog 2016-05-20 10:28:00 +02:00
Adolfo Gómez García
36e19574e0 Added version stamp 2016-05-20 09:50:53 +02:00
Adolfo Gómez García
ef9165b3a2 space :( 2016-05-20 09:39:19 +02:00
Adolfo Gómez García
14cddbb210 Forgot removing comments & try-catch block :) 2016-05-20 09:38:46 +02:00
Adolfo Gómez García
2d14884454 * Fixed time picker not working on chrome
* Added warn on service being replaced by new publication
2016-05-20 09:37:12 +02:00
Adolfo Gómez García
ba4eeffc77 * Fixed client to better show errors
* Adding new publication warn for currently logged in users
2016-05-19 13:50:52 +02:00
Adolfo Gómez García
59179b818e Added mechanics to recover in case of scheduler task that got stuck 2016-05-18 12:22:11 +02:00
Adolfo Gómez García
dbcdc84b3b * Now cleanUDS cleans up possible locks also.
This command is designed to be executed with UDS backend stopped, so be
care!! :)
* Added deadLine calculation to ServicePool based on access calendars
2016-05-18 10:31:43 +02:00
Adolfo Gómez García
c73dae361f Fixed headers replication on UDS Reports 2016-05-17 09:35:53 +02:00
Adolfo Gómez García
ec29371b41 Merge branch 'master' of github.com:dkmstr/openuds 2016-05-06 13:30:18 +02:00
Adolfo Gómez García
9365f5937b Advancend & sync 2016-05-06 13:30:06 +02:00
Adolfo Gómez García
971015d33a Advancend & sync 2016-05-06 13:29:29 +02:00
Adolfo Gómez García
7a742c043b Merge remote-tracking branch 'origin/v1.9' 2016-05-03 08:15:20 +02:00
Adolfo Gómez García
c08a0cb0ed Fixed a bug not allowing linux machines to register when using an case sensitive database0 2016-05-03 08:15:12 +02:00
Adolfo Gómez García
2fdcdb014f Merge remote-tracking branch 'origin/v1.9' 2016-04-29 11:16:13 +02:00
Adolfo Gómez García
3afa96f1c5 Fixed spice scripts 2016-04-28 12:50:30 +02:00
Adolfo Gómez García
5da12a8091 Fixed & Tested that now we can open multiple redirections over same
tunnel.
2016-04-28 12:49:23 +02:00
Adolfo Gómez García
08eeff5604 Fixed duplicate declaration 2016-04-28 10:55:34 +02:00
Adolfo Gómez García
169a946a03 Fixed small bug on return clone 2016-04-28 09:34:43 +02:00
Adolfo Gómez García
94842ce0ef A better implementation for shared connections 2016-04-28 09:34:03 +02:00
Adolfo Gómez García
0fb7d5ed1b * Fixed service pool group setup bug
* Fix to allow some kind of connections to (as spice), to open two
different tunnels (We have to test the fix)
2016-04-28 08:34:47 +02:00
Adolfo Gómez García
2021fd69ec *Merged fixes for UDS Client 2016-04-27 09:59:09 +02:00
Adolfo Gómez García
cbd9330907 * Fixed Login with only one authenticator (not working before)
* Added cache flush on start for FileStorage to avoid problems
2016-04-27 06:59:34 +02:00
Adolfo Gómez García
a250cf4aef Fixed calendar access cache 2016-04-26 16:04:29 +02:00
Adolfo Gómez García
50bc3cd3ef Fixing up things 2016-04-26 15:13:54 +02:00
Adolfo Gómez García
4fb863cfa7 * Fixed several literals
* Added config type field for "choices"
* removed old version snippets
2016-04-25 12:39:58 +02:00
Adolfo Gómez García
3a1bd1eed3 Fixed query to obtain restraineds 2016-04-25 11:16:47 +02:00
Adolfo Gómez García
bce3e429cf Fixed ammend 2016-04-22 15:16:05 +02:00
Adolfo Gómez García
b5baea184f Merged 1.9 update for behind-proxy support 2016-04-22 15:12:28 +02:00
Adolfo Gómez García
42cbad4117 Merged 1.9 update for behind-proxy support 2016-04-22 15:04:36 +02:00
Adolfo Gómez García
242d9b5e6e Advancing with semantic 2016-04-22 07:05:04 +02:00
Adolfo Gómez García
99b17e573c adding semantic 2016-04-22 05:20:30 +02:00
Adolfo Gómez García
701edb91f1 adding semantic 2016-04-22 05:19:52 +02:00
Adolfo Gómez García
f0627db09f Removed legacy html templates.
Added select rendering to template so we can use whatever styles we like
2016-04-22 03:06:00 +02:00
Adolfo Gómez García
56a579e11b Fixed spanish translations 2016-04-21 10:40:36 +02:00
Adolfo Gómez García
4427448eca Updated translations & added proxy support for reverse auth, etc... 2016-04-20 15:25:41 +02:00
Adolfo Gómez García
203e2fcdd0 Added fast navigation to administration interface 2016-04-20 11:37:04 +02:00
Adolfo Gómez García
f7fa92e6c1 Added info to services 2016-04-19 11:17:34 +02:00
Adolfo Gómez García
425257a464 adding information to services, so we can figure whats going on from services list 2016-04-19 10:04:44 +02:00
Adolfo Gómez García
0acc07ebb3 Fixed log table 2016-04-19 05:11:34 +02:00
Adolfo Gómez García
030078a619 Added tabs to a bunch of forms on administration (forms are getting too
big right now)
2016-04-18 11:50:54 +02:00
Adolfo Gómez García
0e6ca4c188 Fixing translations 2016-04-18 07:09:03 +02:00
Adolfo Gómez García
c7d5a1c928 Updated translations 2016-04-18 07:01:51 +02:00
Adolfo Gómez García
e636a4afcd fixhed weblogout 2016-04-15 16:57:16 +02:00
Adolfo Gómez García
8b76324ffc Squashed migration from 1 to 16 (until v1.9). Will keep old migrations until 2.1 release 2016-04-14 14:17:20 +02:00
Adolfo Gómez García
8fe1e55770 Removed RGS migration from 2.0. You will need to at least upgrade to 1.7 before going to 2.0 2016-04-14 13:50:00 +02:00
Adolfo Gómez García
caae694628 Merge branch 'master' of github.com:dkmstr/openuds 2016-04-13 21:32:51 -07:00
Adolfo Gómez García
268e9d551a syntax fixes 2016-04-13 21:32:42 -07:00
Adolfo Gómez García
07137c2416 Several improvements to UDS Client connector 2016-04-14 06:01:41 +02:00
Adolfo Gómez García
273b2a59c4 fixed an error with edit list 2016-04-14 05:14:58 +02:00
Adolfo Gómez García
63364f4e72 added wait to forwarthread for rdp tunnel 2016-04-13 08:05:46 +02:00
Adolfo Gómez García
abc9622d53 Fixed 2.0 client bugs 2016-04-13 07:24:41 +02:00
Adolfo Gómez García
9cd7e2f67b Added a few adds to client & Updated required version for 2.0.0 server to 2.0.0 client 2016-04-12 11:22:29 +02:00
Adolfo Gómez García
9277d3b5fb ignoring binaries 2016-04-11 06:38:58 +02:00
Adolfo Gómez García
6f46e16be8 upgrade to use guacamole 0.9.9 2016-04-11 06:38:32 +02:00
Adolfo Gómez García
0b390e406a New generation of pam files for tunneler based on cmake 2016-04-08 09:44:19 +02:00
Adolfo Gómez García
f301e4654a Updating pam tunneler module 2016-04-08 07:45:52 +02:00
Adolfo Gómez García
62481899a1 fixed tunnel field order on admin interface 2016-04-07 10:28:23 +02:00
Adolfo Gómez García
869dfc8c06 * More translations update
* Added custom limits to providers that allow it
2016-04-07 07:16:15 +02:00
Adolfo Gómez García
939d456b9d Added memcached setting to sample file && minor fixes 2016-04-06 06:13:22 +02:00
Adolfo Gómez García
9c70fb3caf Added caching to FileStorage 2016-04-06 06:02:51 +02:00
Adolfo Gómez García
baf4a677dd Added shared files storage 2016-04-05 04:59:56 +02:00
Adolfo Gómez García
4c4820f166 Chaged a bit the default ssl behaviour 2016-04-04 19:30:23 +02:00
Adolfo Gómez García
2749bfc40c fixed an js translation 2016-04-04 18:33:54 +02:00
Adolfo Gómez García
704e0607eb * Fixed scheduler action to make these execute under a transaction
* Removed xmlrpc url
2016-04-04 18:27:38 +02:00
Adolfo Gómez García
401fbac63e Removed last remaining xmlrcp part 2016-04-04 11:00:51 +02:00
Adolfo Gómez García
7f1252a70a Updating translation & fixing translations errors 2016-04-04 09:42:51 +02:00
Adolfo Gómez García
2df103a348 fixed taglist template for production (javascript must be "nice" and cannot have comments on this templates) 2016-04-04 08:27:59 +02:00
Adolfo Gómez García
489bb44c92 Fixing up for 2.0 release 2016-04-04 07:24:30 +02:00
Adolfo Gómez García
c606b6f00e Fixing up for 2.0 release 2016-04-04 07:12:38 +02:00
Adolfo Gómez García
0b4b38abe7 Fixed model of Calandars && finished Scheduled calendar actions 2016-04-01 07:18:42 +02:00
Adolfo Gómez García
40b71fa983 Fixed to use new datatables 2016-03-31 10:47:59 +02:00
Adolfo Gómez García
6116db5147 basic scheduled actions working (needs backedn worker to be done) 2016-03-30 11:23:23 +02:00
Adolfo Gómez García
e979c6e1e2 Now we can create (but not edit) scheduled actions 2016-03-29 15:45:34 +02:00
Adolfo Gómez García
8f9d042cdd Now we can create (but not edit) scheduled actions 2016-03-29 15:42:41 +02:00
Adolfo Gómez García
fcf030e693 Advanfing on action editing for services pools 2016-03-29 05:30:05 +02:00
Adolfo Gómez García
31e6e01cad fixed deletion of service on validation error 2016-03-28 06:22:03 +02:00
Adolfo Gómez García
1aad0c85a4 Merge remote-tracking branch 'origin/v1.9' 2016-03-28 06:02:23 +02:00
Adolfo Gómez García
e6e16334b3 fixed deleting service on edition & not being valid 2016-03-28 06:02:04 +02:00
Adolfo Gómez García
8a285fddfa Merge remote-tracking branch 'origin/v1.9' 2016-03-19 02:30:34 +01:00
Adolfo Gómez García
c9a690fe8c Removed nonsense public folder from templates 2016-03-18 02:01:17 +01:00
Adolfo Gómez García
b5387d4922 * Fixed Actions Calendars migrations
* Started support for actions calendars edition on dashboard
2016-03-16 11:30:56 +01:00
Adolfo Gómez García
b0a6807ea4 Merge remote-tracking branch 'origin/v1.9'
# Conflicts:
#	VERSION
#	actors/linux/build-packages.sh
#	actors/linux/debian/changelog
#	actors/linux/debian/files
#	client/linux/debian/changelog
#	client/linux/debian/files
2016-03-14 12:16:52 +01:00
Adolfo Gómez García
2e96074961 Upgrades for 2.0
* Added support for /uuid REST method
* Now the http server is relocated on IP Change detection
2016-03-14 12:12:56 +01:00
Adolfo Gómez García
135392d245 Added get next event from a given date to calendar 2016-03-10 11:46:22 +01:00
Adolfo Gómez García
ff622bb9cd * Added optimization for serialization/deserialization (now it get cached with db object)
* Fixed model so now we invoke initGui before getting values on fillInstanceFields
* Upgraded Max creating & Max removing limits so now they can be tied to an specific provider instead of a global variable
* Tested & Fixed OpenStack. Now it seems to work as it should do.
* Several minor fixes/improvements
2016-03-09 11:42:44 +01:00
Adolfo Gómez García
608c1317d7 Updated OpenStack client & added caching features
Added counters to Cache (maybe somtime will store them on db to keep track on performance
2016-03-08 12:36:42 +01:00
Adolfo Gómez García
9f4ef20dc1 OpenStack working (initially) 2016-03-07 18:28:32 +01:00
Adolfo Gómez García
c45833c252 Advancing on openstack a bit more 2016-03-04 14:51:44 +01:00
Adolfo Gómez García
e260fc9790 Advancing toward Openstack provider at a nice pace.
We have decided finally to use directly the REST api instead of any
available API, because we need a fustfill of things only, and we have
this way a better control. (And it's not difficult to implement)
2016-03-04 13:33:36 +01:00
Adolfo Gómez García
cc6ba2ff41 Updated to start with identity api v3 instead of v2, and advanced a lot 2016-03-03 21:33:17 +01:00
Adolfo Gómez García
bec74ddc99 UDS Client for openstack 2016-03-03 19:35:19 +01:00
Adolfo Gómez García
7af7d11c8a * New Clients Versions
* Refactoring
* Minor fixes
2016-02-26 14:16:13 +01:00
Adolfo Gómez García
8934d978fe Almost finished calendars access 2016-02-23 11:23:49 +01:00
Adolfo Gómez García
8376e81532 Adding Access calendars admin 2016-02-23 09:44:40 +01:00
Adolfo Gómez García
6587d9ba2c Fixed downloads to point to 2.0 clients 2016-02-19 09:58:15 +01:00
Adolfo Gómez García
2654036fd2 fixed uds client to work correctly with firefox on kunbuntu 2016-02-19 09:46:22 +01:00
Adolfo Gómez García
f9226e7deb Fixed login fail messages for django 1.9 2016-02-19 08:37:22 +01:00
Adolfo Gómez García
56ac8aece9 Upgrade to Django 1.9 and advances on advances on states fixes (cosmetic fixes to better identify what we refer to) 2016-02-19 08:16:55 +01:00
Adolfo Gómez García
12737df530 Advancing on calendar access & scheduling 2016-02-18 11:03:38 +01:00
Adolfo Gómez García
7b9c835562 Advancing on calendar access & scheduling 2016-02-18 11:03:25 +01:00
Adolfo Gómez García
cbb809db77 * Improved cache for calendars checkings
* Added calentar access & actions models
* Started calendar-pool integration
2016-02-17 10:55:51 +01:00
Adolfo Gómez García
4f9085f0a2 Almost finished grouping services 2016-02-16 07:00:14 +01:00
Adolfo Gómez García
389cf62150 Experimenting & adavancing on services grouping 2016-02-15 11:04:21 +01:00
Adolfo Gómez García
44c367bf8f Addind public template for working on int 2016-02-15 02:34:46 +01:00
Adolfo Gómez García
efb0083161 removing dist from list 2016-02-15 01:38:02 +01:00
Adolfo Gómez García
16c1aba3e7 Added tags to search filter on admin, and also added "tabindex" to input fields 2016-02-12 10:58:57 +01:00
Adolfo Gómez García
07ed8b9762 Fixed Images & pools groups (added priority and enhaced visual on admin 2016-02-12 09:53:33 +01:00
Adolfo Gómez García
fbd0a59a70 Removed whitspaces from tags on addition 2016-02-12 04:52:23 +01:00
Adolfo Gómez García
a08fe53383 * Added "Service Pool Group" full logic, so new we can add services pools to groups, so we can visualzize them grouped. (already needs the visualizarion part)
* Finished basic taglist edition (fixed a bug & added the possibility of insert serveral comma separated values at once')
2016-02-12 04:47:44 +01:00
Adolfo Gómez García
e1b8c43cca Added "tag editing" admin control 2016-02-11 05:44:38 +01:00
Adolfo Gómez García
60f20e64f3 testing link on uds.css 2016-02-10 07:38:51 +01:00
Adolfo Gómez García
6bb1109fe1 Adding tags & tag edition to mayor elemets of uds administration (for filtering, etc..) 2016-02-10 03:53:51 +01:00
Adolfo Gómez García
134f2059dd Added tagging capability to most entities 2016-02-10 01:51:05 +01:00
Adolfo Gómez García
ec93e5c9cc Merge remote-tracking branch 'origin/v1.9' 2016-02-09 12:53:10 +01:00
Adolfo Gómez García
fd6b0c9458 Another big step forward for OpenNebula provider 2016-02-09 09:45:36 +01:00
Adolfo Gómez García
de4aef3a5c * Important advances on OpenNebula service provider
* several semantic changes
* Minor improvements & fixes
2016-02-08 09:33:17 +01:00
Adolfo Gómez García
d024d74529 Merged 1.9 fixes 2016-02-01 17:55:42 +01:00
Adolfo Gómez García
335fd338bd several fixes 2016-01-25 11:38:39 +01:00
Adolfo Gómez García
d7ac59f257 Merge remote-tracking branch 'origin/v1.9' 2016-01-20 10:05:29 +01:00
Adolfo Gómez García
ca54c2c099 Merge remote-tracking branch 'origin/v1.9' 2016-01-20 09:34:30 +01:00
Adolfo Gómez García
491a33421d csv test 2016-01-19 17:22:22 +01:00
Adolfo Gómez García
f1cbcf86e1 Adding report to see user access time/duration 2016-01-19 15:24:19 +01:00
Adolfo Gómez García
e2e0f96d3e Refactoring states for easier reading 2016-01-08 09:37:00 +01:00
Adolfo Gómez García
4be5d8d6e5 Added host verification to uds client (so urls are approved at least
first time by users)
2016-01-08 09:34:20 +01:00
Adolfo Gómez García
b9929566f6 Merge remote-tracking branch 'origin/v1.9' 2015-11-25 17:18:13 +01:00
Adolfo Gómez García
f6492256a8 Merge remote-tracking branch 'origin/v1.9' 2015-11-19 11:49:21 +01:00
Adolfo Gómez García
66d2c63a20 Merge remote-tracking branch 'origin/v1.9' 2015-11-18 14:59:20 +01:00
Adolfo Gómez García
b6f582d84e Merger 1.9 fixes 2015-11-16 20:25:06 +01:00
Adolfo Gómez García
d94cc70eff Merge remote-tracking branch 'origin/v1.9' 2015-11-16 12:45:12 +01:00
Adolfo Gómez García
163245401b Merging 1.9 fixes 2015-11-11 12:15:41 +01:00
Adolfo Gómez García
0add4b4321 Fixed new service operations checker. Improved & easier to understand with this new model 2015-11-10 08:04:39 +01:00
Adolfo Gómez García
19fdcadbcd Upgrading the UserServiceOpChecker to a new & clearer one 2015-11-06 12:04:44 +01:00
Adolfo Gómez García
7b85adaddf Updated version for master 2015-11-06 05:57:26 +01:00
Adolfo Gómez García
d8a0a2f80a Merged 2015-11-06 04:58:06 +01:00
Adolfo Gómez García
ae9a9534fc Merge remote-tracking branch 'origin/v1.9', cookie retrieval 2015-11-06 03:50:44 +01:00
Adolfo Gómez García
1c1003eb41 Added merged from v1.9 that did not goes as expected... :) 2015-11-05 10:34:16 +01:00
Adolfo Gómez García
4bc6d88006 fixing 2015-11-05 10:31:46 +01:00
Adolfo Gómez García
f08593881f Merge remote-tracking branch 'origin/v1.9' 2015-11-05 08:16:54 +01:00
Adolfo Gómez García
30cf167e5b Merge remote-tracking branch 'origin/v1.9' 2015-11-05 08:15:55 +01:00
Adolfo Gómez García
064d881c1e Checking up javascript stuff 2015-11-05 07:30:06 +01:00
Adolfo Gómez García
c3f9d673bd Merge remote-tracking branch 'origin/v1.9' 2015-11-05 07:28:43 +01:00
Adolfo Gómez García
4695dcaa0c Merge remote-tracking branch 'origin/v1.9' 2015-11-02 00:47:08 +01:00
Adolfo Gómez García
e23f22d92d Several fixes for dashboard && new command to clean up cache 2015-10-29 06:57:02 +01:00
Adolfo Gómez García
962f1fcc1c Merge remote-tracking branch 'origin/v1.9' 2015-10-27 01:53:44 +01:00
Adolfo Gómez García
6bc70ff4de Several minor fixes & aditions 2015-10-24 10:32:51 +02:00
Adolfo Gómez García
aaf4b539d5 Merge remote-tracking branch 'origin/v1.9' 2015-10-20 19:49:34 +02:00
Adolfo Gómez García
03d0fc2ba4 Merge remote-tracking branch 'origin/v1.9' 2015-10-19 06:36:57 +02:00
Adolfo Gómez García
407b0ebf55 Merge remote-tracking branch 'origin/v1.9' 2015-10-16 16:59:14 +02:00
Adolfo Gómez García
033ac0d1f6 Seems to finished updating tables. Need to check new working 2015-10-16 08:30:33 +02:00
Adolfo Gómez García
c9e9f60ed1 * Added a more aggresive cache for types, tables & guis (Less requests to server)
* Fixed ServicePools tables
* Fixed log tables
2015-10-16 07:43:03 +02:00
Adolfo Gómez García
162c84e21c Merge remote-tracking branch 'origin/v1.9' 2015-10-15 19:25:57 +02:00
Adolfo Gómez García
9f6d126484 Added images to memory cache instead of db cache 2015-10-15 19:25:48 +02:00
Adolfo Gómez García
0877cc01f4 Almost fixed all tables on dashboard 2015-10-06 11:32:47 +02:00
Adolfo Gómez García
00e85357cf Dashboard upgrade & enhacements 2015-10-06 07:14:40 +02:00
Adolfo Gómez García
cc72b3742f Addind multiselects & overviews to dashboard 2015-10-06 05:39:16 +02:00
Adolfo Gómez García
dff20bd6e1 Added several indexes to optimize some db queries\nFixed too many connections due to not being closed on threads termination\nAdvanced on new dashboard 2015-10-05 13:17:54 +02:00
Adolfo Gómez García
69b6f7d7d8 Merge remote-tracking branch 'origin/v1.9' 2015-10-05 11:48:22 +02:00
Adolfo Gómez García
9881df5117 Clean white squared admin with collapsable menu 2015-10-02 01:08:21 +02:00
Adolfo Gómez García
bc2f83c937 Clean white squared admin with collapsable menu 2015-10-02 00:56:46 +02:00
Adolfo Gómez García
fa78b4b295 Clean white squared admin with collapsable menu 2015-10-02 00:55:58 +02:00
Adolfo Gómez García
95230292c3 Experimenting with dashboard 2015-10-01 07:23:26 +02:00
Adolfo Gómez García
fdaf974009 Advancing on styling. Adding new functionality to dashboard 2015-09-25 17:27:46 +02:00
Adolfo Gómez García
26764c4cab Fixing datatables integration 2015-09-25 04:55:07 +02:00
Adolfo Gómez García
52d0e8977c Styling dashboard 2015-09-24 07:33:52 +02:00
Adolfo Gómez García
1d7df7814c Merge remote-tracking branch 'origin/v1.9' 2015-09-23 17:50:13 +02:00
Adolfo Gómez García
7e9a37e768 advancing & gui-element tables 2015-09-23 10:43:45 +02:00
Adolfo Gómez García
80bf6d77f1 Added "multiple deletions" feature 2015-09-23 03:31:26 +02:00
Adolfo Gómez García
2d7a2d6049 Advancing on new dashboard 2015-09-22 19:53:56 +02:00
Adolfo Gómez García
8363b41a68 Advancing on new dashboard look&feel 2015-09-22 09:46:28 +02:00
Adolfo Gómez García
9804678a30 Updating look&feel of admin dashboard 2015-09-22 04:13:15 +02:00
Adolfo Gómez García
1187c0aa5e * Added a template folder to work on admin design faster
* Updated Admin CSS (Testing new view)
* Minor fixes (typos)
2015-09-22 02:23:27 +02:00
Adolfo Gómez García
36adbe387c Bad resolve fixed 2015-09-22 01:04:32 +02:00
Adolfo Gómez García
df2dcf7acd Merge remote-tracking branch 'origin/v1.9'
# Conflicts:
#	server/src/uds/services/OVirt/OVirtProvider.py
#	server/src/uds/services/OVirt/client/oVirtClient.py

Conflicts resolved
2015-09-21 08:18:45 +02:00
Adolfo Gómez García
3fbb492921 Added summary when adding new calendar rule & merged migrations 2015-09-18 10:02:39 +02:00
Adolfo Gómez García
1b97e2015d More fixes to calendars 2015-09-18 08:06:07 +02:00
Adolfo Gómez García
3814986e41 Fixed calendar checking.\nUpdated CalendarRule model to allow different durations units 2015-09-18 00:47:21 +02:00
Adolfo Gómez García
037a4b523b Fixed calendar rules. Almost finished :-) 2015-09-17 06:53:35 +02:00
Adolfo Gómez García
522d493557 Advancing more on calendar rules edition 2015-09-15 10:43:26 +02:00
Adolfo Gómez García
2ac06f7345 Advancing more on calendar rules edition 2015-09-15 10:43:12 +02:00
Adolfo Gómez García
0745a7aa9a Advancing on rule editing 2015-09-13 04:43:59 +02:00
Adolfo Gómez García
7e419aed8d Updating components for 2.0 2015-09-13 03:30:48 +02:00
Adolfo Gómez García
baa9565140 Merge remote-tracking branch 'origin/v1.9' 2015-09-13 03:30:17 +02:00
Adolfo Gómez García
069dfb154a Updating components 2015-09-13 03:30:12 +02:00
Adolfo Gómez García
485ed4d60b Merge remote-tracking branch 'origin/v1.9' 2015-09-12 22:11:13 +02:00
Adolfo Gómez García
4de3e83ade * Upgraded bootstrap-select
* Upgraded bootstrap-switch
2015-09-11 10:18:21 +02:00
Adolfo Gómez García
73713eac69 * Adding calendar (models, permissions, adm access, ....)
* Upgraded fontawesome
2015-09-11 01:39:01 +02:00
Adolfo Gómez García
6ed924655d Adding calendar/rules models 2015-09-09 10:01:48 +02:00
Adolfo Gómez García
7706262702 Merge remote-tracking branch 'origin/v1.9' 2015-09-08 19:46:31 +02:00
Adolfo Gómez García
e0843179cd Fixing up several minor lang issues 2015-09-07 21:40:12 +02:00
757 changed files with 98258 additions and 56111 deletions

View File

@@ -1 +1 @@
1.9.1
2.2.0

6
actors/.gitignore vendored
View File

@@ -3,6 +3,8 @@ bin
udsactor*.deb
udsactor*.build
udsactor*.changes
/udsactor_1.7.0.dsc
/udsactor_1.7.0.tar.xz
/udsactor_*.dsc
/udsactor_*.tar.xz
/udsactor_*_amd64.buildinfo
/udsactor*.rpm
linux/debian/files

View File

@@ -69,12 +69,14 @@ install-udsactor:
cp scripts/udsactor $(BINDIR)
cp scripts/UDSActorConfig-pkexec $(SBINDIR)
cp scripts/UDSActorTool-startup $(BINDIR)
cp scripts/udsvapp ${BINDIR}
# Policy to run as administrator
cp policy/org.openuds.pkexec.UDSActorConfig.policy $(POLKITDIR)
# Fix permissions
chmod 755 $(BINDIR)/udsactor
chmod 755 $(BINDIR)/udsvapp
chmod 755 $(BINDIR)/UDSActorTool-startup
chmod 755 $(SBINDIR)/UDSActorConfig-pkexec
chmod 755 $(LIBDIR)/UDSActorConfig.py
@@ -93,4 +95,4 @@ endif
uninstall:
rm -rf $(LIBDIR)
# rm -f $(BINDIR)/udsactor
rm -rf $(CFGDIR)
rm -rf $(CFGDIR)

View File

@@ -1,6 +1,6 @@
#!/bin/bash
VERSION=1.9.1
VERSION=`cat ../../VERSION`
RELEASE=1
top=`pwd`

View File

@@ -1,3 +1,21 @@
udsactor (2.2.0) stable; urgency=medium
* Upgraded to 2.2.0 release
-- Adolfo Gómez García <agomez@virtualcable.es> Thu, 19 Oct 2017 16:44:12 +0200
udsactor (2.1.0) stable; urgency=medium
* Fixes for 2.1.0 release
-- Adolfo Gómez García <agomez@virtualcable.es> Tue, 19 Jan 2017 08:00:22 +0200
udsactor (2.0.0) stable; urgency=medium
* Upgrade for 2.0.0
-- Adolfo Gómez García <agomez@virtualcable.es> Tue, 01 Mar 2016 03:39:21 +0100
udsactor (1.9.1) stable; urgency=medium
* Upgrade for 1.9.1

View File

@@ -1,3 +0,0 @@
udsactor-nx_1.9.1_all.deb x11 optional
udsactor-xrdp_1.9.1_all.deb x11 optional
udsactor_1.9.1_all.deb admin optional

View File

@@ -5,6 +5,7 @@
set -e
case "$1" in
configure)
/usr/bin/python2.7 -m compileall /usr/share/UDSActor > /dev/nul 2>&1
# If new "fresh" install or if configuration file has disappeared...
if [ "$2" = "" ] || [ ! -f /etc/udsactor/udsactor.cfg ]; then
db_get udsactor/host

View File

@@ -8,5 +8,5 @@ Type=Application
NoDisplay=true
X-KDE-autostart-after=panel
X-KDE-StartupNotify=false
X-DBUS-StartupType=Unique
X-KDE-UniqueApplet=true
X-DBUS-StartupType=None
X-KDE-UniqueApplet=false

View File

@@ -3,4 +3,4 @@
FOLDER=/usr/share/UDSActor
cd $FOLDER
python -m udsactor.linux.UDSActorService $@
python2.7 -m udsactor.linux.UDSActorService $@

5
actors/linux/scripts/udsvapp Executable file
View File

@@ -0,0 +1,5 @@
#!/bin/sh
/usr/bin/udsactor login "$USER"
$@
/usr/bin/udsactor logout "$USER"

View File

@@ -60,6 +60,7 @@ This package provides the required components to allow this machine to work on a
/etc/init.d/udsactor
/usr/bin/UDSActorTool-startup
/usr/bin/udsactor
/usr/bin/udsvapp
/usr/bin/UDSActorTool
/usr/sbin/UDSActorConfig
/usr/sbin/UDSActorConfig-pkexec

View File

@@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014 Virtual Cable S.L.

View File

@@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014 Virtual Cable S.L.
@@ -33,10 +33,11 @@
from __future__ import unicode_literals
import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
from PyQt4 import QtGui # @UnresolvedImport
from PyQt4 import QtCore # @UnresolvedImport
import pickle
import time
import datetime
import signal
from udsactor import ipc
from udsactor import utils
@@ -50,6 +51,8 @@ from udsactor import VERSION
trayIcon = None
doLogoff = False
def sigTerm(sigNo, stackFrame):
if trayIcon:
@@ -175,10 +178,13 @@ class UDSSystemTray(QtGui.QSystemTrayIcon):
exitAction.triggered.connect(self.about)
self.setContextMenu(self.menu)
self.ipc = MessagesProcessor()
self.sessionStart = datetime.datetime.now()
self.maxIdleTime = None
self.timer = QtCore.QTimer()
self.timer.timeout.connect(self.checkIdle)
self.showIdleWarn = True
self.maxSessionTime = None
self.showMaxSessionWarn = True
self.timer = QtCore.QTimer()
self.timer.timeout.connect(self.checkTimers)
if self.ipc.isAlive() is False:
raise Exception('No connection to service, exiting.')
@@ -206,6 +212,27 @@ class UDSSystemTray(QtGui.QSystemTrayIcon):
# If this is running, it's because he have logged in
self.ipc.sendLogin(operations.getCurrentUser())
def checkTimers(self):
self.checkIdle()
self.checkMaxSession()
def checkMaxSession(self):
if self.maxSessionTime is None or self.maxSessionTime == 0:
logger.debug('Returning because maxSessionTime is cero')
return
remainingTime = self.maxSessionTime - (datetime.datetime.now() - self.sessionStart).total_seconds()
logger.debug('Remaining time: {}'.format(remainingTime))
if self.showMaxSessionWarn is True and remainingTime < 300: # With five minutes, show a warning message
self.showMaxSessionWarn = False
self.msgDlg.displayMessage('Your session will expire in less that 5 minutes. Please, save your work and disconnect.')
return
if remainingTime <= 0:
logger.debug('Remaining time is less than cero, exiting')
self.quit()
def checkIdle(self):
if self.maxIdleTime is None: # No idle check
return
@@ -217,19 +244,19 @@ class UDSSystemTray(QtGui.QSystemTrayIcon):
idleTime = operations.getIdleDuration()
remainingTime = self.maxIdleTime - idleTime
if remainingTime > 300: # Reset show Warning dialog if we have more than 5 minutes left
if remainingTime > 120: # Reset show Warning dialog if we have more than 5 minutes left
self.showIdleWarn = True
logger.debug('User has been idle for: {}'.format(idleTime))
if remainingTime <= 0:
logger.info('User has been idle for too long, notifying Broker that service can be reclaimed')
self.quit()
if self.showIdleWarn is True and remainingTime < 120: # With two minutes, show a warning message
self.showIdleWarn = False
self.msgDlg.displayMessage("You have been idle for too long. The session will end if you don't resume operations")
if remainingTime <= 0:
logger.info('User has been idle for too long, notifying Broker that service can be reclaimed')
self.quit(logoff=True)
def displayMessage(self, message):
logger.debug('Displaying message')
self.msgDlg.displayMessage(message)
@@ -247,7 +274,7 @@ class UDSSystemTray(QtGui.QSystemTrayIcon):
'''
Invoked when received information from service
'''
logger.debug('Got information message: {}'.format(info))
logger.info('Got information message: {}'.format(info))
if 'idle' in info:
idle = int(info['idle'])
operations.initIdleDuration(idle)
@@ -256,12 +283,19 @@ class UDSSystemTray(QtGui.QSystemTrayIcon):
else:
self.maxIdleTime = None
if 'maxSession' in info:
maxSession = int(info['maxSession'])
# operations.initMaxSession(maxSession)
self.maxSessionTime = maxSession
logger.debug('Set maxsession to {}'.format(maxSession))
def about(self):
self.aboutDlg.exec_()
def quit(self):
def quit(self, logoff=False):
global doLogoff
logger.debug('Quit invoked')
if self.stopped is False:
if not self.stopped:
self.stopped = True
try:
# If we close Client, send Logoff to Broker
@@ -272,10 +306,7 @@ class UDSSystemTray(QtGui.QSystemTrayIcon):
# May we have lost connection with server, simply exit in that case
pass
try:
operations.loggoff() # Invoke log off
except Exception:
pass
doLogoff = logoff
self.app.quit()
@@ -296,7 +327,7 @@ if __name__ == '__main__':
sys.exit(1)
# Sets a default idle duration, but will not be used unless idle is notified from server
operations.initIdleDuration(3600 * 10)
operations.initIdleDuration(3600 * 16)
trayIcon.show()
@@ -308,4 +339,12 @@ if __name__ == '__main__':
logger.debug('Exiting')
trayIcon.quit()
if doLogoff:
try:
time.sleep(1)
operations.loggoff() # Invoke log off
except Exception:
pass
sys.exit(res)

View File

@@ -88,7 +88,7 @@
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
<number>2</number>
</property>
<widget class="QWidget" name="aboutTab">
<attribute name="title">
@@ -109,7 +109,7 @@
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Verdana'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif';&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Sans Serif'; font-weight:600;&quot;&gt;(c) 2014, Virtual Cable S.L.U.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Sans Serif'; font-weight:600;&quot;&gt;(c) 2012-2016, Virtual Cable S.L.U.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-style:italic;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://www.udsenterprise.com&quot;&gt;&lt;span style=&quot; font-family:'MS Shell Dlg 2'; font-size:8pt; text-decoration: underline; color:#0000ff;&quot;&gt;http://www.udsenterprise.com&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://www.openuds.org&quot;&gt;&lt;span style=&quot; font-family:'MS Shell Dlg 2'; font-size:8pt; text-decoration: underline; color:#0000ff;&quot;&gt;http://www.openuds.org&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
@@ -167,7 +167,7 @@ p, li { white-space: pre-wrap; }
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Verdana'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'MS Shell Dlg 2'; font-size:8pt;&quot;&gt;Copyright (c) 2014 Virtual Cable S.L.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'MS Shell Dlg 2'; font-size:8pt;&quot;&gt;Copyright (c) 2012-2016 Virtual Cable S.L.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'MS Shell Dlg 2'; font-size:8pt;&quot;&gt;All rights reserved.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

View File

@@ -109,6 +109,7 @@ class Api(object):
self.mac = None
self.url = "{}://{}/rest/actor/".format(('http', 'https')[self.useSSL], self.host)
self.idle = None
self.maxSession = None
self.secretKey = six.text_type(uuid.uuid4())
try:
self.newerRequestLib = requests.__version__.split('.')[0] >= '1'

View File

@@ -34,14 +34,14 @@ from __future__ import unicode_literals
# On centos, old six release does not includes byte2int, nor six.PY2
import six
VERSION = '1.9.0'
VERSION = '2.2.0'
__title__ = 'udsactor'
__version__ = VERSION
__build__ = 0x010750
__author__ = 'Adolfo Gómez'
__build__ = 0x010755
__author__ = 'Adolfo Gómez <dkmaster@dkmon.com>'
__license__ = "BSD 3-clause"
__copyright__ = "Copyright 2014-2015 VirtualCable S.L.U."
__copyright__ = "Copyright 2014-2017 VirtualCable S.L.U."
if not hasattr(six, 'byte2int'):

View File

@@ -172,7 +172,10 @@ class HTTPServerHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def get_information(self, params):
# TODO: Return something useful? :)
return 'Information'
return 'Up and running'
def get_uuid(self, params):
return self.service.api.uuid
def log_error(self, fmt, *args):
logger.error('HTTP ' + fmt % args)
@@ -188,18 +191,43 @@ class HTTPServerThread(threading.Thread):
if HTTPServerHandler.uuid is None:
HTTPServerHandler.uuid = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(48))
self.certFile = createSelfSignedCert()
HTTPServerHandler.service = service
self.certFile = createSelfSignedCert()
self.server = socketserver.TCPServer(address, HTTPServerHandler)
self.initiateServer(address)
def getPort(self):
return self.address[1]
def getIp(self):
return self.address[0]
def initiateServer(self, address):
self.address = (address[0], address[1]) # Copy address & keep it for future reference...
addr = ('0.0.0.0', address[1]) # Adapt to listen on 0.0.0.0
self.server = socketserver.TCPServer(addr, HTTPServerHandler)
self.server.socket = ssl.wrap_socket(self.server.socket, certfile=self.certFile, server_side=True)
def getServerUrl(self):
return 'https://{}:{}/{}'.format(self.server.server_address[0], self.server.server_address[1], HTTPServerHandler.uuid)
return 'https://{}:{}/{}'.format(self.getIp(), self.getPort(), HTTPServerHandler.uuid)
def stop(self):
logger.debug('Stopping REST Service')
self.server.shutdown()
def restart(self, address=None):
if address is None:
# address = self.server.server_address
address = self.address
self.address = (address[0], self.address[1]) # Copy address & keep it for future reference, port is never changed once assigned on init
# Listening on 0.0.0.0, does not need to restart listener..
# self.stop()
# self.initiateServer(address)
def run(self):
self.server.serve_forever()

View File

@@ -36,6 +36,8 @@ import sys
import six
import traceback
import pickle
import errno
import time
from udsactor.utils import toUnicode
from udsactor.log import logger
@@ -407,8 +409,11 @@ class ClientIPC(threading.Thread):
self.messageReceived()
except socket.error as e:
if e.errno == errno.EINTR:
time.sleep(1) #
continue # Ignore interrupted system call
logger.error('Communication with server got an error: {}'.format(toUnicode(e.strerror)))
self.running = False
# self.running = False
return
except Exception as e:
tb = traceback.format_exc()

View File

@@ -36,6 +36,7 @@ from udsactor import operations
from udsactor.service import CommonService
from udsactor.service import initCfg
from udsactor.service import IPC_PORT
from udsactor import ipc
from udsactor.log import logger
@@ -44,15 +45,23 @@ from udsactor.linux.daemon import Daemon
from udsactor.linux import renamer
import sys
import time
import os
import stat
import subprocess
POST_CMD = '/etc/udsactor/post'
PRECONNECT_CMD = '/etc/udsactor/pre'
try:
from prctl import set_proctitle
from prctl import set_proctitle # @UnresolvedImport
except Exception: # Platform may not include prctl, so in case it's not available, we let the "name" as is
def set_proctitle(_):
pass
class UDSActorSvc(Daemon, CommonService):
rebootMachineAfterOp = False
def __init__(self, args=None):
Daemon.__init__(self, '/var/run/udsa.pid')
CommonService.__init__(self)
@@ -62,6 +71,12 @@ class UDSActorSvc(Daemon, CommonService):
Renames the computer, and optionally sets a password for an user
before this
'''
hostName = operations.getComputerName()
if hostName.lower() == name.lower():
logger.info('Computer name is already {}'.format(hostName))
self.setReady()
return
# Check for password change request for an user
if user is not None:
@@ -75,13 +90,48 @@ class UDSActorSvc(Daemon, CommonService):
'Could not change password for user {} (maybe invalid current password is configured at broker): {} '.format(user, unicode(e)))
renamer.rename(name)
self.setReady()
if self.rebootMachineAfterOp is False:
self.setReady()
else:
logger.info('Rebooting computer to activate new name {}'.format(name))
self.reboot()
def joinDomain(self, name, domain, ou, account, password):
logger.fatal('Join domain is not supported on linux platforms right now')
def preConnect(self, user, protocol):
'''
Invoked when received a PRE Connection request via REST
'''
# Execute script in /etc/udsactor/post after interacting with broker, if no reboot is requested ofc
# This will be executed only when machine gets "ready"
try:
if os.path.isfile(PRECONNECT_CMD):
if (os.stat(PRECONNECT_CMD).st_mode & stat.S_IXUSR) != 0:
subprocess.call([PRECONNECT_CMD, user, protocol])
else:
logger.info('PRECONNECT file exists but it it is not executable (needs execution permission by root)')
else:
logger.info('PRECONNECT file not found & not executed')
except Exception as e:
# Ignore output of execution command
logger.error('Executing preconnect command give')
def run(self):
initCfg()
cfg = initCfg() # Gets a local copy of config to get "reboot"
logger.debug('CFG: {}'.format(cfg))
if cfg is not None:
self.rebootMachineAfterOp = cfg.get('reboot', True)
else:
self.rebootMachineAfterOp = False
logger.info('Reboot after is {}'.format(self.rebootMachineAfterOp))
logger.debug('Running Daemon')
set_proctitle('UDSActorDaemon')
@@ -106,6 +156,21 @@ class UDSActorSvc(Daemon, CommonService):
logger.debug('Reboot has been requested, stopping service')
return
# Execute script in /etc/udsactor/post after interacting with broker, if no reboot is requested ofc
# This will be executed only when machine gets "ready"
try:
if os.path.isfile(POST_CMD):
if (os.stat(POST_CMD).st_mode & stat.S_IXUSR) != 0:
subprocess.call([POST_CMD, ])
else:
logger.info('POST file exists but it it is not executable (needs execution permission by root)')
else:
logger.info('POST file not found & not executed')
except Exception as e:
# Ignore output of execution command
logger.error('Executing post command give')
self.initIPC()
# *********************

View File

@@ -122,7 +122,7 @@ def getComputerName():
def getNetworkInfo():
for ifname in _getInterfaces():
ip, mac = _getIpAndMac(ifname)
if mac != '00:00:00:00:00:00': # Skips local interfaces
if mac != '00:00:00:00:00:00' and ip.startswith('169.254') is False: # Skips local interfaces & interfaces with no dhcp IPs
yield utils.Bunch(name=ifname, mac=mac, ip=ip)
@@ -194,8 +194,10 @@ try:
# Fix result type to XScreenSaverInfo Structure
xss.XScreenSaverQueryExtension.restype = ctypes.c_int
xss.XScreenSaverAllocInfo.restype = ctypes.POINTER(XScreenSaverInfo) # Result in a XScreenSaverInfo structure
display = xlib.XOpenDisplay(None)
info = xss.XScreenSaverAllocInfo()
except Exception: # Libraries not accesible, not found or whatever..
xlib = xss = None
xlib = xss = display = info = None
def initIdleDuration(atLeastSeconds):
@@ -219,20 +221,18 @@ def getIdleDuration():
if xlib is None or xss is None:
return 0 # Libraries not available
# production code might want to not hardcode the offset 16...
display = xlib.XOpenDisplay(None)
event_base = ctypes.c_int()
error_base = ctypes.c_int()
available = xss.XScreenSaverQueryExtension(display, ctypes.byref(event_base), ctypes.byref(error_base))
if available != 1:
return 0 # No screen saver is available, no way of getting idle
info = xss.XScreenSaverAllocInfo()
xss.XScreenSaverQueryInfo(display, xlib.XDefaultRootWindow(display), info)
if info.contents.state != 0:
# Centos seems to set state to 1?? (weird, but it's happening don't know why... will try this way)
if info.contents.state != 0 and 'centos' not in platform.linux_distribution()[0].lower().strip():
return 3600 * 100 * 1000 # If screen saver is active, return a high enough value
return info.contents.idle / 1000.0

View File

@@ -78,3 +78,11 @@ def writeConfig(data):
cfg.write(f)
os.chmod(CONFIGFILE, 0o0600)
def useOldJoinSystem():
return False
# Right now, we do not really need an application to be run on "startup" as could ocur with windows
def runApplication():
return None

View File

@@ -44,6 +44,10 @@ from .utils import exceptionToMessage
import socket
import time
import random
import os
import subprocess
import shlex
import stat
IPC_PORT = 39188
@@ -70,6 +74,8 @@ def initCfg():
cfg = None
break
return cfg
class CommonService(object):
def __init__(self):
@@ -84,6 +90,25 @@ class CommonService(object):
def reboot(self):
self.rebootRequested = True
def execute(self, cmdLine, section):
cmd = shlex.split(cmdLine, posix=False)
if os.path.isfile(cmd[0]):
if (os.stat(cmd[0]).st_mode & stat.S_IXUSR) != 0:
try:
res = subprocess.check_call(cmd)
except Exception as e:
logger.error('Got exception executing: {} - {}'.format(cmdLine, e))
return False
logger.info('Result of executing cmd was {}'.format(res))
return True
else:
logger.error('{} file exists but it it is not executable (needs execution permission by admin/root)'.format(section))
else:
logger.error('{} file not found & not executed'.format(section))
return False
def setReady(self):
self.api.setReady([(v.mac, v.ip) for v in operations.getNetworkInfo()])
@@ -136,6 +161,14 @@ class CommonService(object):
# Wait a bit before next check
self.doWait(5000)
# Now try to run the "runonce" element
runOnce = store.runApplication()
if runOnce is not None:
logger.info('Executing runOnce app: {}'.format(runOnce))
if self.execute(runOnce, 'RunOnce') is True:
# operations.reboot()
return False
# Broker connection is initialized, now get information about what to
# do
counter = 0
@@ -205,8 +238,17 @@ class CommonService(object):
try:
# Notifies all interfaces IPs
self.api.notifyIpChanges(((v.mac, v.ip) for v in netInfo))
# Regenerates Known ips
self.knownIps = dict(((v.mac, v.ip) for v in netInfo))
# And notify new listening address to broker
address = (self.knownIps[self.api.mac], self.httpServer.getPort())
# And new listening address
self.httpServer.restart(address)
# sends notification
self.api.notifyComm(self.httpServer.getServerUrl())
except Exception as e:
logger.warn('Got an error notifiying IPs to broker: {} (will retry in a bit)'.format(e.message.decode('windows-1250', 'ignore')))
@@ -217,14 +259,21 @@ class CommonService(object):
return
if msg == ipc.REQ_LOGIN:
self.api.login(data)
elif msg == ipc.REQ_LOGOUT:
res = self.api.login(data).split('\t')
# third parameter, if exists, sets maxSession duration to this.
# First & second parameters are ip & hostname of connection source
if len(res) >= 3:
self.api.maxSession = int(res[2]) # Third parameter is max session duration
msg = ipc.REQ_INFORMATION # Senf information, requested or not, to client on login notification
if msg == ipc.REQ_LOGOUT:
self.api.logout(data)
self.onLogout(data)
elif msg == ipc.REQ_INFORMATION:
if msg == ipc.REQ_INFORMATION:
info = {}
if self.api.idle is not None:
info['idle'] = self.api.idle
if self.api.maxSession is not None:
info['maxSession'] = self.api.maxSession
self.ipc.sendInformationMessage(info)
def initIPC(self):
@@ -236,7 +285,7 @@ class CommonService(object):
self.ipc.start()
if self.api.mac in self.knownIps:
address = (self.knownIps[self.api.mac], random.randrange(40000, 44000))
address = (self.knownIps[self.api.mac], random.randrange(43900, 44000))
logger.info('Starting REST listener at {}'.format(address))
self.httpServer = httpserver.HTTPServerThread(address, self)
self.httpServer.start()

View File

@@ -76,7 +76,7 @@ class SensLogon(win32com.server.policy.DesignatedWrapPolicy):
data = self.service.api.login(args[0])
logger.debug('Data received for login: {}'.format(data))
data = data.split('\t')
if len(data) == 2:
if len(data) >= 2:
logger.debug('Data is valid: {}'.format(data))
windir = os.environ['windir']
with open(os.path.join(windir, 'remoteip.txt'), 'w') as f:

View File

@@ -40,9 +40,11 @@ import win32event # @UnresolvedImport, pylint: disable=import-error
import win32com.client # @UnresolvedImport, @UnusedImport, pylint: disable=import-error
import pythoncom # @UnresolvedImport, pylint: disable=import-error
import servicemanager # @UnresolvedImport, pylint: disable=import-error
import subprocess
import os
from udsactor import operations
from udsactor import store
from udsactor.service import CommonService
from udsactor.service import initCfg
@@ -55,6 +57,8 @@ from .SENS import SENSGUID_PUBLISHER
from .SENS import PROGID_EventSubscription
from .SENS import PROGID_EventSystem
POST_CMD = 'c:\\windows\\post-uds.bat'
class UDSActorSvc(win32serviceutil.ServiceFramework, CommonService):
'''
@@ -113,7 +117,7 @@ class UDSActorSvc(win32serviceutil.ServiceFramework, CommonService):
operations.renameComputer(name)
# Reboot just after renaming
logger.info('Rebooting computer got activate new name {}'.format(name))
logger.info('Rebooting computer to activate new name {}'.format(name))
self.reboot()
def oneStepJoin(self, name, domain, ou, account, password):
@@ -158,12 +162,15 @@ class UDSActorSvc(win32serviceutil.ServiceFramework, CommonService):
ver = ver[0] * 10 + ver[1]
logger.debug('Starting joining domain {} with name {} (detected operating version: {})'.format(
domain, name, ver))
# If file c:\compat.bin exists, joind domain in two steps instead one
# Accepts one step joinDomain, also remember XP is no more supported by
# microsoft, but this also must works with it because will do a "multi
# step" join
if ver >= 60:
if ver >= 60 and store.useOldJoinSystem() is False:
self.oneStepJoin(name, domain, ou, account, password)
else:
logger.info('Using multiple step join because configuration requests to do so')
self.multiStepJoin(name, domain, ou, account, password)
def preConnect(self, user, protocol):
@@ -292,6 +299,17 @@ class UDSActorSvc(win32serviceutil.ServiceFramework, CommonService):
logger.debug('Registered SENS, running main loop')
# Execute script in c:\\windows\\post-uds.bat after interacting with broker, if no reboot is requested ofc
# This will be executed only when machine gets "ready"
try:
if os.path.isfile(POST_CMD):
subprocess.call([POST_CMD, ])
else:
logger.info('POST file not found & not executed')
except Exception as e:
# Ignore output of execution command
logger.error('Executing post command give')
# *********************
# * Main Service loop *
# *********************

View File

@@ -48,7 +48,7 @@ class LocalLogger(object):
filename=os.path.join(tempfile.gettempdir(), 'udsactor.log'),
filemode='a',
format='%(levelname)s %(asctime)s %(message)s',
level=logging.DEBUG
level=logging.INFO
)
self.logger = logging.getLogger('udsactor')
self.serviceLogger = False

View File

@@ -45,6 +45,7 @@ from udsactor.log import logger
def getErrorMessage(res=0):
# sys_fs_enc = sys.getfilesystemencoding() or 'mbcs'
msg = win32api.FormatMessage(res)
return msg.decode('windows-1250', 'ignore')

View File

@@ -82,7 +82,6 @@ def readConfig():
except Exception:
return None
def writeConfig(data, fixPermissions=True):
try:
key = wreg.OpenKey(baseKey, path, 0, wreg.KEY_ALL_ACCESS) # @UndefinedVariable
@@ -93,3 +92,32 @@ def writeConfig(data, fixPermissions=True):
wreg.SetValueEx(key, "", 0, wreg.REG_BINARY, encoder(cPickle.dumps(data))) # @UndefinedVariable
wreg.CloseKey(key) # @UndefinedVariable
def useOldJoinSystem():
try:
key = wreg.OpenKey(baseKey, 'Software\\UDSEnterpriseActor', 0, wreg.KEY_QUERY_VALUE) # @UndefinedVariable
try:
data, _ = wreg.QueryValueEx(key, 'join') # @UndefinedVariable
except Exception:
data = ''
wreg.CloseKey(key) # @UndefinedVariable
except:
data = ''
return data == 'old'
# Gives the oportunity to run an application ONE TIME (because, the registry key "run" will be deleted after read)
def runApplication():
try:
key = wreg.OpenKey(baseKey, 'Software\\UDSEnterpriseActor', 0, wreg.KEY_ALL_ACCESS) # @UndefinedVariable
try:
data, _ = wreg.QueryValueEx(key, 'run') # @UndefinedVariable
wreg.DeleteValue(key, 'run') # @UndefinedVariable
except Exception:
data = None
wreg.CloseKey(key) # @UndefinedVariable
except:
data = None
return data

View File

@@ -1,6 +1,6 @@
#!/bin/bash
VERSION=`cat ../../VERSION`
VERSION=`cat ../../../VERSION`
RELEASE=1
# Debian based
dpkg-buildpackage -b

View File

@@ -1,3 +1,21 @@
udsclient (2.2.0) stable; urgency=medium
* Updated release
-- Adolfo Gómez García <agomez@virtualcable.es> Thu, 27 Aug 2017 14:18:18 +0200
udsclient (2.1.0) stable; urgency=medium
* Updated release
-- Adolfo Gómez García <agomez@virtualcable.es> Sun, 23 Oct 2016 21:12:23 +0200
udsclient (2.0.0) stable; urgency=medium
* Release upgrade
-- Adolfo Gómez García <agomez@virtualcable.es> Tue, 01 Mar 2016 09:33:18 +0100
udsclient (1.9.1) stable; urgency=medium
* Minor fixes & making version match UDS version

View File

@@ -10,6 +10,6 @@ Package: udsclient
Section: admin
Priority: optional
Architecture: all
Depends: python-paramiko (>=0.8.2), python-qt4 (>=4.9), python-six(>=1.1), python (>=2.7), rdesktop | freerdp-x11, ${misc:Depends}
Depends: python-paramiko (>=0.8.2), python-qt4 (>=4.9), python-six(>=1.1), python (>=2.7), freerdp-x11 | rdesktop, desktop-file-utils, ${misc:Depends}
Description: Client connector for Universal Desktop Services (UDS) Broker
This package provides the required components to allow this machine to connect to services provided by UDS Broker.

View File

@@ -0,0 +1,2 @@
udsclient_2.2.0_all.deb admin optional
udsclient_2.2.0_amd64.buildinfo admin optional

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014 Virtual Cable S.L.
# Copyright (c) 2014-2017 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
@@ -43,9 +43,15 @@ from uds import tools
from uds import VERSION
import webbrowser
import json
import sys
import six
from UDSWindow import Ui_MainWindow
# Server before this version uses "unsigned" scripts
OLD_METHOD_VERSION = '2.4.0'
class RetryException(Exception):
pass
@@ -54,6 +60,10 @@ class UDSClient(QtGui.QMainWindow):
ticket = None
scrambler = None
withError = False
animTimer = None
anim = 0
animInverted = False
serverVersion = 'X.Y.Z' # Will be overwriten on getVersion
def __init__(self):
QtGui.QMainWindow.__init__(self)
@@ -73,8 +83,14 @@ class UDSClient(QtGui.QMainWindow):
vpos = (screen.height() - mysize.height() - mysize.height()) / 2
self.move(hpos, vpos)
self.animTimer = QtCore.QTimer()
QtCore.QObject.connect(self.animTimer, QtCore.SIGNAL('timeout()'), self.updateAnim)
self.activateWindow()
self.startAnim()
def closeWindow(self):
self.close()
@@ -90,21 +106,36 @@ class UDSClient(QtGui.QMainWindow):
# return
def showError(self, e):
self.ui.progressBar.setValue(100)
self.ui.info.setText('Error')
QtGui.QMessageBox.critical(self, 'Error', six.text_type(e), QtGui.QMessageBox.Ok)
logger.error('got error: {}'.format(e))
self.stopAnim()
self.ui.info.setText('UDS Plugin Error') # In fact, main window is hidden, so this is not visible... :)
self.closeWindow()
QtGui.QMessageBox.critical(None, 'UDS Plugin Error', '{}'.format(e), QtGui.QMessageBox.Ok)
self.withError = True
def cancelPushed(self):
self.close()
def _updateProgressBar(self, increment, maximum=100):
val = self.ui.progressBar.value()
val += increment
if val > maximum:
val = maximum
self.ui.progressBar.setValue(val)
@QtCore.pyqtSlot()
def updateAnim(self):
self.anim += 2
if self.anim > 99:
self.animInverted = not self.animInverted
self.ui.progressBar.setInvertedAppearance(self.animInverted)
self.anim = 0
self.ui.progressBar.setValue(self.anim)
def startAnim(self):
self.ui.progressBar.invertedAppearance = False
self.anim = 0
self.animInverted = False
self.ui.progressBar.setInvertedAppearance(self.animInverted)
self.animTimer.start(40)
def stopAnim(self):
self.ui.progressBar.invertedAppearance = False
self.animTimer.stop()
@QtCore.pyqtSlot()
def getVersion(self):
@@ -114,10 +145,7 @@ class UDSClient(QtGui.QMainWindow):
@QtCore.pyqtSlot(dict)
def version(self, data):
try:
self.ui.progressBar.setValue(20)
self.processError(data)
self.ui.info.setText('Processing...')
if data['result']['requiredVersion'] > VERSION:
@@ -125,16 +153,18 @@ class UDSClient(QtGui.QMainWindow):
webbrowser.open(data['result']['downloadUrl'])
self.closeWindow()
return
self.serverVersion = data['result']['requiredVersion']
self.getTransportData()
except RetryException as e:
self._updateProgressBar(5, 80)
self.ui.info.setText(six.text_type(e))
QtCore.QTimer.singleShot(1000, self.getVersion)
except Exception as e:
self.showError(e)
@QtCore.pyqtSlot()
def getTransportData(self):
try:
@@ -151,21 +181,39 @@ class UDSClient(QtGui.QMainWindow):
try:
self.processError(data)
self.ui.progressBar.setValue(80)
params = None
script = data['result'].decode('base64').decode('bz2')
if self.serverVersion <= OLD_METHOD_VERSION:
script = data['result'].decode('base64').decode('bz2')
else:
res = data['result']
# We have three elements on result:
# * Script
# * Signature
# * Script data
# We test that the Script has correct signature, and them execute it with the parameters
script, signature, params = res['script'].decode('base64').decode('bz2'), res['signature'], json.loads(res['params'].decode('base64').decode('bz2'))
if tools.verifySignature(script, signature) is False:
raise Exception('Invalid UDS code signature. Please, report to administrator')
self.stopAnim()
self.ui.progressBar.setValue(100)
if 'darwin' in sys.platform:
self.showMinimized()
QtCore.QTimer.singleShot(3000, self.endScript)
self.hide()
six.exec_(script, globals(), {'parent': self})
# if self.serverVersion <= OLD_METHOD_VERSION:
# errorString = '<p>The server <b>{}</b> runs an old version of UDS:</p>'.format(host)
# errorString += '<p>To avoid security issues, you must approve old UDS Version access.</p>'
# if QtGui.QMessageBox.warning(None, 'ACCESS Warning', errorString, QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) == QtGui.QMessageBox.No:
# raise Exception('Server not approved. Access denied.')
six.exec_(script, globals(), {'parent': self, 'sp': params})
except RetryException as e:
self._updateProgressBar(5, 80)
self.ui.info.setText(six.text_type(e) + ', retrying access...')
# Retry operation in ten seconds
QtCore.QTimer.singleShot(10000, self.getTransportData)
@@ -205,6 +253,24 @@ def done(data):
QtGui.QMessageBox.critical(None, 'Notice', six.text_type(data.data), QtGui.QMessageBox.Ok)
sys.exit(0)
# Ask user to approve endpoint
def approveHost(host, parentWindow=None):
settings = QtCore.QSettings()
settings.beginGroup('endpoints')
approved = settings.value(host, False).toBool()
errorString = '<p>The server <b>{}</b> must be approved:</p>'.format(host)
errorString += '<p>Only approve UDS servers that you trust to avoid security issues.</p>'
if approved or QtGui.QMessageBox.warning(parentWindow, 'ACCESS Warning', errorString, QtGui.QMessageBox.Yes | QtGui.QMessageBox.No) == QtGui.QMessageBox.Yes:
settings.setValue(host, True)
approved = True
settings.endGroup()
return approved
if __name__ == "__main__":
logger.debug('Initializing connector')
# Initialize app
@@ -226,6 +292,10 @@ if __name__ == "__main__":
# First parameter must be url
try:
uri = sys.argv[1]
if uri == '--test':
sys.exit(0)
logger.debug('URI: {}'.format(uri))
if uri[:6] != 'uds://' and uri[:7] != 'udss://':
raise Exception()
@@ -241,13 +311,20 @@ if __name__ == "__main__":
# Setup REST api endpoint
RestRequest.restApiUrl = '{}://{}/rest/client'.format(['http', 'https'][ssl], host)
logger.debug('Setting requert URL to {}'.format(RestRequest.restApiUrl))
logger.debug('Setting request URL to {}'.format(RestRequest.restApiUrl))
# RestRequest.restApiUrl = 'https://172.27.0.1/rest/client'
try:
logger.debug('Starting execution')
# Approbe before going on
if approveHost(host) is False:
raise Exception('Host {} was not approved'.format(host))
win = UDSClient()
win.show()
win.start()
exitVal = app.exec_()
@@ -261,12 +338,3 @@ if __name__ == "__main__":
logger.debug('Exiting')
sys.exit(exitVal)
# Build base REST
# v = RestRequest('', done)
# v.get()
# sys.exit(1)
# myapp = UDSConfigDialog(cfg)
# myapp.show()

View File

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 48 KiB

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

View File

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 48 KiB

View File

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

View File

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 48 KiB

View File

Before

Width:  |  Height:  |  Size: 137 KiB

After

Width:  |  Height:  |  Size: 137 KiB

View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2014 Virtual Cable S.L.
# Copyright (c) 2014-2017 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
@@ -34,11 +34,11 @@ from __future__ import unicode_literals
# On centos, old six release does not includes byte2int, nor six.PY2
import six
VERSION = '1.9.1'
VERSION = '2.2.0'
__title__ = 'udclient'
__version__ = VERSION
__build__ = 0x010750
__build__ = 0x010760
__author__ = 'Adolfo Gómez'
__license__ = "BSD 3-clause"
__copyright__ = "Copyright 2014-2015 VirtualCable S.L.U."
__copyright__ = "Copyright 2014-2017 VirtualCable S.L.U."

View File

@@ -14,15 +14,15 @@ import time
from .log import logger
class ForwardServer (SocketServer.ThreadingTCPServer):
class ForwardServer(SocketServer.ThreadingTCPServer):
daemon_threads = True
allow_reuse_address = True
class Handler (SocketServer.BaseRequestHandler):
class Handler(SocketServer.BaseRequestHandler):
def handle(self):
self.thread.isConnected = True
self.thread.currentConnections += 1
try:
chan = self.ssh_transport.open_channel('direct-tcpip',
@@ -65,10 +65,11 @@ class Handler (SocketServer.BaseRequestHandler):
except Exception:
pass
if self.thread.stoppable is True:
self.thread.currentConnections -= 1
if self.thread.stoppable is True and self.thread.currentConnections == 0:
self.thread.stop()
self.thread.isConnected = False
class ForwardThread(threading.Thread):
status = 0 # Connecting
@@ -92,31 +93,49 @@ class ForwardThread(threading.Thread):
self.stopEvent = threading.Event()
self.timer = None
self.isConnected = False
self.currentConnections = 0
self.stoppable = False
self.client = None
def clone(self, redirectHost, redirectPort, localPort=None):
if localPort is None:
localPort = random.randrange(40000, 50000)
ft = ForwardThread(self.server, self.port, self.username, self.password, localPort, redirectHost, redirectPort, self.waitTime)
ft.client = self.client
self.client.useCount += 1 # One more using this client
ft.start()
while ft.status == 0:
time.sleep(0.1)
return (ft, localPort)
def _timerFnc(self):
self.timer = None
logger.debug('Timer fnc: {}'.format(self.isConnected))
logger.debug('Timer fnc: {}'.format(self.currentConnections))
self.stoppable = True
if self.isConnected is False:
if self.currentConnections <= 0:
self.stop()
def run(self):
self.client = paramiko.SSHClient()
self.client.load_system_host_keys()
self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
if self.client is None:
self.client = paramiko.SSHClient()
self.client.useCount = 1 # Custom added variable, to keep track on when to close tunnel
self.client.load_system_host_keys()
self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
logger.debug('Connecting to ssh host %s:%d ...' % (self.server, self.port))
logger.debug('Connecting to ssh host %s:%d ...' % (self.server, self.port))
try:
self.client.connect(self.server, self.port, username=self.username, password=self.password, timeout=5)
except Exception as e:
logger.exception('Exception connecting: ')
self.status = 2 # Error
return
try:
self.client.connect(self.server, self.port, username=self.username, password=self.password, timeout=5)
except Exception as e:
logger.exception('Exception connecting: ')
self.status = 2 # Error
return
class SubHandler (Handler):
class SubHandler(Handler):
chain_host = self.redirectHost
chain_port = self.redirectPort
ssh_transport = self.client.get_transport()
@@ -141,7 +160,10 @@ class ForwardThread(threading.Thread):
self.fs.shutdown()
if self.client is not None:
self.client.close()
self.client.useCount -= 1
if self.client.useCount == 0:
self.client.close()
self.client = None # Clean up
except Exception:
logger.exception('Exception stopping')
pass

View File

@@ -33,13 +33,20 @@ from __future__ import unicode_literals
import logging
import os
import sys
import tempfile
if sys.platform.startswith('linux'):
from os.path import expanduser
logFile = expanduser('~/udsclient.log')
else:
logFile = os.path.join(tempfile.gettempdir(), b'udsclient.log')
logging.basicConfig(
filename=os.path.join(tempfile.gettempdir(), b'udsclient.log'),
filename=logFile,
filemode='a',
format='%(levelname)s %(asctime)s %(message)s',
level=logging.INFO
level=logging.DEBUG
)
logger = logging.getLogger('udsclient')

View File

@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2015 Virtual Cable S.L.
# Copyright (c) 2017 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,

View File

@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2015 Virtual Cable S.L.
# Copyright (c) 2017 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
@@ -91,6 +91,7 @@ class RestRequest(QObject):
@pyqtSlot(QNetworkReply, list)
def _sslError(self, reply, errors):
settings = QSettings()
settings.beginGroup('ssl')
cert = errors[0].certificate()
digest = six.text_type(cert.digest().toHex())
@@ -107,6 +108,8 @@ class RestRequest(QObject):
settings.setValue(digest, True)
reply.ignoreSslErrors()
settings.endGroup()
def get(self):
request = QNetworkRequest(self.url)
request.setRawHeader('User-Agent', osDetector.getOs() + " - UDS Connector " + VERSION)

View File

@@ -32,6 +32,8 @@
'''
from __future__ import unicode_literals
from base64 import b64decode
import tempfile
import string
import random
@@ -40,6 +42,7 @@ import socket
import stat
import six
import sys
import time
from log import logger
@@ -47,9 +50,25 @@ _unlinkFiles = []
_tasksToWait = []
_execBeforeExit = []
sys_fs_enc = sys.getfilesystemencoding() or 'mbcs'
# Public key for scripts
PUBLIC_KEY = '''-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuNURlGjBpqbglkTTg2lh
dU5qPbg9Q+RofoDDucGfrbY0pjB9ULgWXUetUWDZhFG241tNeKw+aYFTEorK5P+g
ud7h9KfyJ6huhzln9eyDu3k+kjKUIB1PLtA3lZLZnBx7nmrHRody1u5lRaLVplsb
FmcnptwYD+3jtJ2eK9ih935DYAkYS4vJFi2FO+npUQdYBZHPG/KwXLjP4oGOuZp0
pCTLiCXWGjqh2GWsTECby2upGS/ZNZ1r4Ymp4V2A6DZnN0C0xenHIY34FWYahbXF
ZGdr4DFBPdYde5Rb5aVKJQc/pWK0CV7LK6Krx0/PFc7OGg7ItdEuC7GSfPNV/ANt
5BEQNF5w2nUUsyN8ziOrNih+z6fWQujAAUZfpCCeV9ekbwXGhbRtdNkbAryE5vH6
eCE0iZ+cFsk72VScwLRiOhGNelMQ7mIMotNck3a0P15eaGJVE2JV0M/ag/Cnk0Lp
wI1uJQRAVqz9ZAwvF2SxM45vnrBn6TqqxbKnHCeiwstLDYG4fIhBwFxP3iMH9EqV
2+QXqdJW/wLenFjmXfxrjTRr+z9aYMIdtIkSpADIlbaJyTtuQpEdWnrlDS2b1IGd
Okbm65EebVzOxfje+8dRq9Uqwip8f/qmzFsIIsx3wPSvkKawFwb0G5h2HX5oJrk0
nVgtClKcDDlSaBsO875WDR0CAwEAAQ==
-----END PUBLIC KEY-----'''
def saveTempFile(content, filename=None):
if filename is None:
filename = b''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(16))
@@ -68,6 +87,27 @@ def saveTempFile(content, filename=None):
return filename
def readTempFile(filename):
if 'win32' in sys.platform:
filename = filename.encode('utf-8')
filename = os.path.join(tempfile.gettempdir(), filename)
try:
with open(filename, 'r') as f:
return f.read()
except Exception:
return None
def testServer(host, port, timeOut=4):
try:
sock = socket.create_connection((host, int(port)), timeOut)
sock.close()
except Exception:
return False
return True
def findApp(appName, extraPath=None):
if 'win32' in sys.platform and isinstance(appName, six.text_type):
appName = appName.encode(sys_fs_enc)
@@ -109,6 +149,8 @@ def unlinkFiles():
'''
Removes all wait-and-unlink files
'''
if len(_unlinkFiles) > 0:
time.sleep(5) # Wait 5 seconds before deleting anything
for f in _unlinkFiles:
try:
os.unlink(f)
@@ -122,7 +164,13 @@ def addTaskToWait(taks):
def waitForTasks():
for t in _tasksToWait:
t.wait()
try:
if hasattr(t, 'join'):
t.join()
elif hasattr(t, 'wait'):
t.wait()
except Exception:
pass
def addExecBeforeExit(fnc):
@@ -132,3 +180,24 @@ def addExecBeforeExit(fnc):
def execBeforeExit():
for fnc in _execBeforeExit:
fnc.__call__()
def verifySignature(script, signature):
'''
Verifies with a public key from whom the data came that it was indeed
signed by their private key
param: public_key_loc Path to public key
param: signature String signature to be verified
return: Boolean. True if the signature is valid; False otherwise.
'''
# For signature checking
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA256
rsakey = RSA.importKey(PUBLIC_KEY)
signer = PKCS1_v1_5.new(rsakey)
digest = SHA256.new(script) # Script is "binary string" here
if signer.verify(digest, b64decode(signature)):
return True
return False

View File

@@ -1 +0,0 @@
udsclient_1.9.1_all.deb admin optional

17
client/thin/.project Normal file
View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>UDSClient-Thin</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.python.pydev.PyDevBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.python.pydev.pythonNature</nature>
</natures>
</projectDescription>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?eclipse-pydev version="1.0"?><pydev_project>
<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
<path>/${PROJECT_DIR_NAME}/src</path>
</pydev_pathproperty>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.7</pydev_property>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
</pydev_project>

View File

@@ -0,0 +1,158 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2017 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
from __future__ import unicode_literals
from uds import ui
from uds.rest import RestRequest, RetryException
from uds.forward import forward
from uds import VERSION
from uds.log import logger # @UnresolvedImport
from uds import tools
import six
import sys
import pickle
def approveHost(host):
from os.path import expanduser
hostsFile = expanduser('~/.udsclient.hosts')
try:
with open(hostsFile, 'r') as f:
approvedHosts = f.read().splitlines()
except Exception:
approvedHosts = []
host = host.lower()
if host in approvedHosts:
return True
errorString = 'The server {} must be approved:\n'.format(host)
errorString += 'Only approve UDS servers that you trust to avoid security issues.'
approved = ui.question("ACCESS Warning", errorString)
if approved:
approvedHosts.append(host)
logger.debug('Host was approved, saving to approvedHosts file')
try:
with open(hostsFile, 'w') as f:
f.write('\n'.join(approvedHosts))
except Exception:
logger.warn('Got exception writing to {}'.format(hostsFile))
return approved
def getWithRetry(rest, url, params=None):
while True:
try:
res = rest.get(url, params)
return res
except RetryException as e:
if ui.question('Service not available', 'Error {}.\nPlease, wait a minute and press "OK" to retry, or "CANCEL" to abort'.format(e)) is True:
continue
raise Exception('Cancelled by user')
if __name__ == "__main__":
logger.debug('Initializing connector')
if six.PY3 is False:
logger.debug('Fixing threaded execution of commands')
import threading
threading._DummyThread._Thread__stop = lambda x: 42
# First parameter must be url
try:
uri = sys.argv[1]
if uri == '--test':
sys.exit(0)
logger.debug('URI: {}'.format(uri))
if uri[:6] != 'uds://' and uri[:7] != 'udss://':
raise Exception()
ssl = uri[3] == 's'
host, ticket, scrambler = uri.split('//')[1].split('/')
logger.debug('ssl: {}, host:{}, ticket:{}, scrambler:{}'.format(ssl, host, ticket, scrambler))
except Exception:
logger.debug('Detected execution without valid URI, exiting')
ui.message('UDS Client', 'UDS Client Version {}'.format(VERSION))
sys.exit(1)
rest = RestRequest(host, ssl)
logger.debug('Setting request URL to {}'.format(rest.restApiUrl))
# Main requests part
# First, get version
try:
res = getWithRetry(rest, '')
logger.debug('Got information {}'.format(res))
if res['requiredVersion'] > VERSION:
ui.message("New UDS Client available", "A new uds version is needed in order to access this version of UDS.\nPlease, download and install it")
sys.exit(1)
res = getWithRetry(rest, '/{}/{}'.format(ticket, scrambler), params={'hostname': tools.getHostName(), 'version': VERSION})
script = res.decode('base64').decode('bz2')
logger.debug('Script: {}'.format(script))
six.exec_(script, globals(), {'parent': None})
except Exception as e:
error = 'ERROR: {}'.format(e)
logger.error(error)
ui.message('Error', error)
sys.exit(2)
# Finalize
try:
tools.waitForTasks()
except Exception:
pass
try:
tools.unlinkFiles()
except Exception:
pass
try:
tools.execBeforeExit()
except Exception:
pass

View File

@@ -0,0 +1 @@
../../../full/src/uds/__init__.py

View File

@@ -0,0 +1 @@
../../../full/src/uds/forward.py

1
client/thin/src/uds/log.py Symbolic link
View File

@@ -0,0 +1 @@
../../../full/src/uds/log.py

View File

@@ -0,0 +1 @@
../../../full/src/uds/osDetector.py

View File

@@ -0,0 +1,86 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2015 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
from __future__ import unicode_literals
import requests
from . import VERSION
import json
import six
import osDetector
from .log import logger
class RetryException(Exception):
pass
class RestRequest(object):
restApiUrl = ''
def __init__(self, host, ssl=True): # parent not used
super(RestRequest, self).__init__()
self.host = host
self.ssl = ssl
self.restApiUrl = '{}://{}/rest/client'.format(['http', 'https'][ssl], host)
def get(self, url, params=None):
url = self.restApiUrl + url
if params is not None:
url += '?' + '&'.join('{}={}'.format(k, six.moves.urllib.parse.quote(six.text_type(v).encode('utf8'))) for k, v in params.iteritems()) # @UndefinedVariable
logger.debug('Requesting {}'.format(url))
try:
r = requests.get(url, headers={'Content-type': 'application/json', 'User-Agent': osDetector.getOs() + " - UDS Connector " + VERSION }, verify=False)
except requests.exceptions.ConnectionError as e:
raise Exception('Error connecting to UDS Server at {}'.format(self.restApiUrl[0:-11]))
if r.ok:
logger.debug('Request was OK. {}'.format(r.text))
data = json.loads(r.text)
if not 'error' in data:
return data['result']
# Has error
if data.get('retryable', '0') == '1':
raise RetryException(data['error'])
raise Exception(data['error'])
else:
logger.error('Error requesting {}: {}, {}'.format(url, r.code. r.text))
raise Exception('Error {}: {}'.format(r.code, r.text))
return data

View File

@@ -0,0 +1 @@
../../../full/src/uds/tools.py

View File

@@ -0,0 +1,44 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2017 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
from __future__ import unicode_literals
try:
import gtkui as theUI
except Exception:
import consoleui as theUI # @Reimport
def message(title, message):
theUI.message(title, message)
def question(title, message):
return theUI.question(title, message)

View File

@@ -0,0 +1,58 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2017 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
from __future__ import unicode_literals
import random
import os
import tempfile
import string
import webbrowser
TEMPLATE = '''<html>
<head>
<title>{title}</title>
</head>
<body>
<h1>{title}</h1>
<p>{message}<P>
</body>
</html>
'''
def _htmlFilename():
return os.path.join(tempfile.gettempdir(), ''.join([random.choice(string.ascii_lowercase) for i in range(22)]) + '.html')
def message(title, message):
filename = _htmlFilename()
with open(filename, 'w') as f:
f.write(TEMPLATE.format(title=title, message=message))
webbrowser.open('file://' + filename, new=0, autoraise=False)

View File

@@ -0,0 +1,49 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2017 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
from __future__ import unicode_literals
import sys
import time
from uds.log import logger
counter = 0
def message(title, message):
sys.stderr.write("** {} **\n {}\n".format(title, message))
def question(title, message):
global counter
if counter > 100: # 5 minutes
return False
counter += 1
sys.stderr.write("** {} **\n{}\nReturning YES in 3 seconds. (counter is {})\n".format(title, message, counter))
time.sleep(3) # Wait 3 seconds before returning
return True

View File

@@ -0,0 +1,143 @@
# -*- coding: utf-8 -*-
#
# Copyright (c) 2017 Virtual Cable S.L.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of Virtual Cable S.L. nor the names of its contributors
# may be used to endorse or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''
@author: Adolfo Gómez, dkmaster at dkmon dot com
'''
from __future__ import unicode_literals
import re
import pygtk
pygtk.require('2.0')
import gtk
import gobject
LINE_LEN = 65
class Dialog():
def __init__(self, title, message, timeout=-1, withCancel=True):
self.title = title
self.message = message
self.timeout = timeout
self.withCancel = withCancel
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_position(gtk.WIN_POS_CENTER)
# self.window.set_size_request(320, 200)
self.window.set_title(self.title)
self.create_widgets()
self.connect_signals()
self.window.show_all()
self.window.connect("destroy", self.destroy)
# Setup "auto OK" timer
if timeout != -1:
self.timerId = gobject.timeout_add(self.timeout * 1000, self.callback_timer)
else:
self.timerId = -1
self.result = False
gtk.main()
@property
def adapted_message(self):
msg = ''
for l in re.sub(r'<p[^>]*>', '', self.message).replace('</p>', '\n').split('\n'):
words = []
length = 0
for word in l.split(' '):
if length + len(word) >= LINE_LEN:
msg += ' '.join(words) + '\n'
words = []
length = 0
length += len(word) + 1
words.append(word)
msg += ' '.join(words) + '\n'
return msg
def create_widgets(self):
self.vbox = gtk.VBox(spacing=10)
self.vbox.set_size_request(490, -1)
self.messageLabel = gtk.Label()
# Fix message markup
# self.message = re.sub(r'<p[^>]*>', '<span font_weight="bold">', self.message).replace('</p>', '</span>\n' )
# Set as simple markup
self.messageLabel.set_markup('\n' + self.adapted_message + '\n')
self.messageLabel.set_alignment(xalign=0.5, yalign=1)
self.hbox = gtk.HBox(spacing=10)
self.button_ok = gtk.Button("OK")
self.hbox.pack_start(self.button_ok)
if self.withCancel:
self.button_cancel = gtk.Button("Cancel")
self.hbox.pack_start(self.button_cancel)
self.vbox.pack_start(self.messageLabel)
self.vbox.pack_start(self.hbox)
self.window.add(self.vbox)
def connect_signals(self):
self.button_ok.connect("clicked", self.callback_ok)
if self.withCancel:
self.button_cancel.connect("clicked", self.callback_cancel)
def destroy(self, widget, data=None):
self.setResult(False)
def setResult(self, val):
if self.timerId != -1:
gobject.source_remove(self.timerId)
self.timerId = -1
self.result = val
self.window.hide()
gtk.main_quit()
def callback_ok(self, widget, callback_data=None):
self.setResult(True)
def callback_cancel(self, widget, callback_data=None):
self.setResult(False)
def callback_timer(self):
self.setResult(True)
def message(title, message):
Dialog(title, message, withCancel=False)
def question(title, message):
dlg = Dialog(title, message, timeout=30, withCancel=True)
return dlg.result

View File

@@ -0,0 +1,4 @@
#!/bin/sh
cd /lib/UDSClient
exec python UDSClient.pyc $@

View File

@@ -0,0 +1,11 @@
Steps:
1.- If building from repository, full copy (recursive) the "src" folder of "udsclient/thin" inside the "udsclient" folder. If building from the .tar.gz, simply ignor4e this step
2.- Copy the folder "udsclient" to /build/packages inside the thinstation build environment
3.- enter the chroot of thinstation
4.- go to the udsclient folder (/build/packages/udsclient)
5.- Execute "build.sh"
6.- Edit the file /build/build.conf, and add this line:
package udsclient
7.- Execute the build process
Ready!!!

View File

@@ -0,0 +1,2 @@
lib
src

View File

@@ -0,0 +1,11 @@
[Desktop Entry]
Name=UDSClient
Comment=UDS Helper
Keywords=uds;client;vdi;
Exec=/bin/udsclient %u
Icon=help-browser
StartupNotify=true
Terminal=false
Type=Application
Categories=Utility;
MimeType=x-scheme-handler/uds;x-scheme-handler/udss;

View File

@@ -0,0 +1,4 @@
#!/bin/sh
cd /lib/UDSClient
exec python UDSClient.pyc $@

View File

@@ -0,0 +1,13 @@
#!/bin/sh
pip install paramiko requests six pycrypto
rm -rf lib
mkdir -p lib/python2.7/site-packages
for a in requests paramiko pyasn1 cryptography packaging idna asn1crypto six enum ipaddress cffi Crypto; do cp -r /usr/lib/python2.7/site-packages/$a* lib/python2.7/site-packages/; done
cp src/udsclient bin
chmod 755 bin/udsclient
mkdir lib/UDSClient
cp src/UDSClient.py lib/UDSClient
chmod 755 lib/UDSClient/UDSClient.py
cp -r src/uds lib/UDSClient
mkdir lib/applications
cp UDSClient.desktop lib/applications

View File

@@ -0,0 +1,5 @@
base
#add your own dependancies to this file, base should always be included.
python
pygtk
freerdp

Some files were not shown because too many files have changed in this diff Show More