commit
57ef0c8319
25 changed files with 2898 additions and 0 deletions
-
202LICENSE
-
16README
-
1client/.calculate_directory
-
1client/system/.calculate_directory
-
1client/system/install/.calculate_directory
-
12client/system/install/usr/share/config/kdm/kdmrc
-
1client/system/uninstall/.calculate_directory
-
12client/system/uninstall/usr/share/config/kdm/kdmrc
-
1client/user/.calculate_directory
-
51data/client
-
31data/login.d/10client
-
BINi18n/cl_client_ru.mo
-
59lib/cl_keys.c
-
7lib/cl_keys.i
-
1pym/__init__.py
-
1824pym/cl_client.py
-
140pym/cl_client_cmd.py
-
19pym/cl_fill_client.py
-
64pym/cl_share_cmd.py
-
132pym/cl_sync.py
-
64pym/cl_vars_client.py
-
70scripts/cl-client-2.2
-
63scripts/cl-sync-2.2
-
5setup.cfg
-
121setup.py
@ -0,0 +1,202 @@ |
|||
|
|||
Apache License |
|||
Version 2.0, January 2004 |
|||
http://www.apache.org/licenses/ |
|||
|
|||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION |
|||
|
|||
1. Definitions. |
|||
|
|||
"License" shall mean the terms and conditions for use, reproduction, |
|||
and distribution as defined by Sections 1 through 9 of this document. |
|||
|
|||
"Licensor" shall mean the copyright owner or entity authorized by |
|||
the copyright owner that is granting the License. |
|||
|
|||
"Legal Entity" shall mean the union of the acting entity and all |
|||
other entities that control, are controlled by, or are under common |
|||
control with that entity. For the purposes of this definition, |
|||
"control" means (i) the power, direct or indirect, to cause the |
|||
direction or management of such entity, whether by contract or |
|||
otherwise, or (ii) ownership of fifty percent (50%) or more of the |
|||
outstanding shares, or (iii) beneficial ownership of such entity. |
|||
|
|||
"You" (or "Your") shall mean an individual or Legal Entity |
|||
exercising permissions granted by this License. |
|||
|
|||
"Source" form shall mean the preferred form for making modifications, |
|||
including but not limited to software source code, documentation |
|||
source, and configuration files. |
|||
|
|||
"Object" form shall mean any form resulting from mechanical |
|||
transformation or translation of a Source form, including but |
|||
not limited to compiled object code, generated documentation, |
|||
and conversions to other media types. |
|||
|
|||
"Work" shall mean the work of authorship, whether in Source or |
|||
Object form, made available under the License, as indicated by a |
|||
copyright notice that is included in or attached to the work |
|||
(an example is provided in the Appendix below). |
|||
|
|||
"Derivative Works" shall mean any work, whether in Source or Object |
|||
form, that is based on (or derived from) the Work and for which the |
|||
editorial revisions, annotations, elaborations, or other modifications |
|||
represent, as a whole, an original work of authorship. For the purposes |
|||
of this License, Derivative Works shall not include works that remain |
|||
separable from, or merely link (or bind by name) to the interfaces of, |
|||
the Work and Derivative Works thereof. |
|||
|
|||
"Contribution" shall mean any work of authorship, including |
|||
the original version of the Work and any modifications or additions |
|||
to that Work or Derivative Works thereof, that is intentionally |
|||
submitted to Licensor for inclusion in the Work by the copyright owner |
|||
or by an individual or Legal Entity authorized to submit on behalf of |
|||
the copyright owner. For the purposes of this definition, "submitted" |
|||
means any form of electronic, verbal, or written communication sent |
|||
to the Licensor or its representatives, including but not limited to |
|||
communication on electronic mailing lists, source code control systems, |
|||
and issue tracking systems that are managed by, or on behalf of, the |
|||
Licensor for the purpose of discussing and improving the Work, but |
|||
excluding communication that is conspicuously marked or otherwise |
|||
designated in writing by the copyright owner as "Not a Contribution." |
|||
|
|||
"Contributor" shall mean Licensor and any individual or Legal Entity |
|||
on behalf of whom a Contribution has been received by Licensor and |
|||
subsequently incorporated within the Work. |
|||
|
|||
2. Grant of Copyright License. Subject to the terms and conditions of |
|||
this License, each Contributor hereby grants to You a perpetual, |
|||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable |
|||
copyright license to reproduce, prepare Derivative Works of, |
|||
publicly display, publicly perform, sublicense, and distribute the |
|||
Work and such Derivative Works in Source or Object form. |
|||
|
|||
3. Grant of Patent License. Subject to the terms and conditions of |
|||
this License, each Contributor hereby grants to You a perpetual, |
|||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable |
|||
(except as stated in this section) patent license to make, have made, |
|||
use, offer to sell, sell, import, and otherwise transfer the Work, |
|||
where such license applies only to those patent claims licensable |
|||
by such Contributor that are necessarily infringed by their |
|||
Contribution(s) alone or by combination of their Contribution(s) |
|||
with the Work to which such Contribution(s) was submitted. If You |
|||
institute patent litigation against any entity (including a |
|||
cross-claim or counterclaim in a lawsuit) alleging that the Work |
|||
or a Contribution incorporated within the Work constitutes direct |
|||
or contributory patent infringement, then any patent licenses |
|||
granted to You under this License for that Work shall terminate |
|||
as of the date such litigation is filed. |
|||
|
|||
4. Redistribution. You may reproduce and distribute copies of the |
|||
Work or Derivative Works thereof in any medium, with or without |
|||
modifications, and in Source or Object form, provided that You |
|||
meet the following conditions: |
|||
|
|||
(a) You must give any other recipients of the Work or |
|||
Derivative Works a copy of this License; and |
|||
|
|||
(b) You must cause any modified files to carry prominent notices |
|||
stating that You changed the files; and |
|||
|
|||
(c) You must retain, in the Source form of any Derivative Works |
|||
that You distribute, all copyright, patent, trademark, and |
|||
attribution notices from the Source form of the Work, |
|||
excluding those notices that do not pertain to any part of |
|||
the Derivative Works; and |
|||
|
|||
(d) If the Work includes a "NOTICE" text file as part of its |
|||
distribution, then any Derivative Works that You distribute must |
|||
include a readable copy of the attribution notices contained |
|||
within such NOTICE file, excluding those notices that do not |
|||
pertain to any part of the Derivative Works, in at least one |
|||
of the following places: within a NOTICE text file distributed |
|||
as part of the Derivative Works; within the Source form or |
|||
documentation, if provided along with the Derivative Works; or, |
|||
within a display generated by the Derivative Works, if and |
|||
wherever such third-party notices normally appear. The contents |
|||
of the NOTICE file are for informational purposes only and |
|||
do not modify the License. You may add Your own attribution |
|||
notices within Derivative Works that You distribute, alongside |
|||
or as an addendum to the NOTICE text from the Work, provided |
|||
that such additional attribution notices cannot be construed |
|||
as modifying the License. |
|||
|
|||
You may add Your own copyright statement to Your modifications and |
|||
may provide additional or different license terms and conditions |
|||
for use, reproduction, or distribution of Your modifications, or |
|||
for any such Derivative Works as a whole, provided Your use, |
|||
reproduction, and distribution of the Work otherwise complies with |
|||
the conditions stated in this License. |
|||
|
|||
5. Submission of Contributions. Unless You explicitly state otherwise, |
|||
any Contribution intentionally submitted for inclusion in the Work |
|||
by You to the Licensor shall be under the terms and conditions of |
|||
this License, without any additional terms or conditions. |
|||
Notwithstanding the above, nothing herein shall supersede or modify |
|||
the terms of any separate license agreement you may have executed |
|||
with Licensor regarding such Contributions. |
|||
|
|||
6. Trademarks. This License does not grant permission to use the trade |
|||
names, trademarks, service marks, or product names of the Licensor, |
|||
except as required for reasonable and customary use in describing the |
|||
origin of the Work and reproducing the content of the NOTICE file. |
|||
|
|||
7. Disclaimer of Warranty. Unless required by applicable law or |
|||
agreed to in writing, Licensor provides the Work (and each |
|||
Contributor provides its Contributions) on an "AS IS" BASIS, |
|||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or |
|||
implied, including, without limitation, any warranties or conditions |
|||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A |
|||
PARTICULAR PURPOSE. You are solely responsible for determining the |
|||
appropriateness of using or redistributing the Work and assume any |
|||
risks associated with Your exercise of permissions under this License. |
|||
|
|||
8. Limitation of Liability. In no event and under no legal theory, |
|||
whether in tort (including negligence), contract, or otherwise, |
|||
unless required by applicable law (such as deliberate and grossly |
|||
negligent acts) or agreed to in writing, shall any Contributor be |
|||
liable to You for damages, including any direct, indirect, special, |
|||
incidental, or consequential damages of any character arising as a |
|||
result of this License or out of the use or inability to use the |
|||
Work (including but not limited to damages for loss of goodwill, |
|||
work stoppage, computer failure or malfunction, or any and all |
|||
other commercial damages or losses), even if such Contributor |
|||
has been advised of the possibility of such damages. |
|||
|
|||
9. Accepting Warranty or Additional Liability. While redistributing |
|||
the Work or Derivative Works thereof, You may choose to offer, |
|||
and charge a fee for, acceptance of support, warranty, indemnity, |
|||
or other liability obligations and/or rights consistent with this |
|||
License. However, in accepting such obligations, You may act only |
|||
on Your own behalf and on Your sole responsibility, not on behalf |
|||
of any other Contributor, and only if You agree to indemnify, |
|||
defend, and hold each Contributor harmless for any liability |
|||
incurred by, or claims asserted against, such Contributor by reason |
|||
of your accepting any such warranty or additional liability. |
|||
|
|||
END OF TERMS AND CONDITIONS |
|||
|
|||
APPENDIX: How to apply the Apache License to your work. |
|||
|
|||
To apply the Apache License to your work, attach the following |
|||
boilerplate notice, with the fields enclosed by brackets "[]" |
|||
replaced with your own identifying information. (Don't include |
|||
the brackets!) The text should be enclosed in the appropriate |
|||
comment syntax for the file format. We also recommend that a |
|||
file or class name and description of purpose be included on the |
|||
same "printed page" as the copyright notice for easier |
|||
identification within third-party archives. |
|||
|
|||
Copyright [yyyy] [name of copyright owner] |
|||
|
|||
Licensed under the Apache License, Version 2.0 (the "License"); |
|||
you may not use this file except in compliance with the License. |
|||
You may obtain a copy of the License at |
|||
|
|||
http://www.apache.org/licenses/LICENSE-2.0 |
|||
|
|||
Unless required by applicable law or agreed to in writing, software |
|||
distributed under the License is distributed on an "AS IS" BASIS, |
|||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
See the License for the specific language governing permissions and |
|||
limitations under the License. |
@ -0,0 +1,16 @@ |
|||
AUTHOR: Mir Calculate Ltd. <support@calculate.ru> |
|||
|
|||
INSTALL |
|||
------- |
|||
|
|||
calculate-client needs the following library version installed, in order to run: |
|||
Python >= 2.5 |
|||
python-ldap >= 2.0.0 |
|||
pyxml >= 0.8 |
|||
calculate-lib >= 2.2.0 |
|||
calculate-desktop >= 2.2.0 |
|||
|
|||
To install calculate-client, just execute the install script 'setup.py'. |
|||
Example: |
|||
|
|||
./setup.py install |
@ -0,0 +1 @@ |
|||
# Calculate append=skip cl_name==calculate-client |
@ -0,0 +1 @@ |
|||
# Calculate append=skip cl_pass_action==install||cl_pass_action==uninstall |
@ -0,0 +1 @@ |
|||
# Calculate append=skip cl_pass_action==install |
@ -0,0 +1,12 @@ |
|||
# Calculate format=kde exists(/usr/share/config/kdm/kdmrc)==1 |
|||
[X-*-Core] |
|||
Reset=/usr/share/calculate/xdm/logout |
|||
Startup=/usr/share/calculate/xdm/login |
|||
#?cl_remote_host!=# |
|||
[X-*-Greeter] |
|||
MinShowUID=1000 |
|||
#cl_remote_host# |
|||
#?cl_remote_host==# |
|||
[X-*-Greeter] |
|||
MinShowUID=999 |
|||
#cl_remote_host# |
@ -0,0 +1 @@ |
|||
# Calculate append=skip cl_pass_action==uninstall |
@ -0,0 +1,12 @@ |
|||
# Calculate format=kde exists(/usr/share/config/kdm/kdmrc)==1 |
|||
[X-*-Core] |
|||
Reset=/usr/share/config/kdm/Xreset |
|||
Startup=/usr/share/config/kdm/Xstartup |
|||
#?cl_remote_host!=# |
|||
[X-*-Greeter] |
|||
MinShowUID=1000 |
|||
#cl_remote_host# |
|||
#?cl_remote_host==# |
|||
[X-*-Greeter] |
|||
MinShowUID=999 |
|||
#cl_remote_host# |
@ -0,0 +1 @@ |
|||
# Calculate path=~ name= chmod=0700 chown=#-ur_login-#:#-ur_group-# cl_pass_action==user |
@ -0,0 +1,51 @@ |
|||
#!/sbin/runscript |
|||
# Copyright 2008-2010 Mir Calculate Ltd. http://www.calculate-linux.org |
|||
# |
|||
# Licensed under the Apache License, Version 2.0 (the "License"); |
|||
# you may not use this file except in compliance with the License. |
|||
# You may obtain a copy of the License at |
|||
# |
|||
# http://www.apache.org/licenses/LICENSE-2.0 |
|||
# |
|||
# Unless required by applicable law or agreed to in writing, software |
|||
# distributed under the License is distributed on an "AS IS" BASIS, |
|||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
# See the License for the specific language governing permissions and |
|||
# limitations under the License. |
|||
|
|||
depend() { |
|||
use localmount |
|||
after bootmisc consolefont modules netmount |
|||
after readahead-list ypbind autofs openvpn gpm lircmd |
|||
after cupsd fbcondecor sshd cron wicd |
|||
before xdm |
|||
after acpid consolekit hald xfs |
|||
} |
|||
|
|||
start() { |
|||
# Mount remote Samba filesystems. |
|||
ebegin "Mounting domain resources" |
|||
# Identifing domain server by env file |
|||
local env_file=/var/calculate/calculate.env |
|||
if [[ -f $env_file ]] |
|||
then |
|||
local SERVER=$( sed -rn 's/^cl_remote_host\s*=\s*(\S+)$/\1/p' $env_file ) |
|||
for COUNT in $( seq 0 20 ) |
|||
do |
|||
ping -w2 -c1 $SERVER &>/dev/null && break || sleep 1 |
|||
done |
|||
fi |
|||
cl-client --mount |
|||
eend $? "Some samba remote resources to mount" |
|||
} |
|||
|
|||
stop(){ |
|||
ebegin "Unmount domain resources" |
|||
[[ $( mount | grep ' /var/calculate/remote ' ) ]] && |
|||
umount /var/calculate/remote |
|||
[[ $( mount | grep '/var/calculate/client-home on /home ' ) ]] && |
|||
umount /home |
|||
eend 0 |
|||
} |
|||
|
|||
# vim:ts=4 |
@ -0,0 +1,31 @@ |
|||
#! /bin/sh |
|||
# Copyright 2010 Mir Calculate Ltd. http://www.calculate-linux.org |
|||
# |
|||
# Licensed under the Apache License, Version 2.0 (the "License"); |
|||
# you may not use this file except in compliance with the License. |
|||
# You may obtain a copy of the License at |
|||
# |
|||
# http://www.apache.org/licenses/LICENSE-2.0 |
|||
# |
|||
# Unless required by applicable law or agreed to in writing, software |
|||
# distributed under the License is distributed on an "AS IS" BASIS, |
|||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
# See the License for the specific language governing permissions and |
|||
# limitations under the License. |
|||
|
|||
env-update |
|||
source /etc/profile |
|||
source /usr/share/calculate-2.2/xdm/functions |
|||
|
|||
if [ -e '/usr/bin/cl-sync-2.2' ]; |
|||
then |
|||
ERRORLOG=`/usr/bin/cl-sync-2.2 --progress --color=never --login $USER 2>&1` |
|||
# при неудачном выполнении, сгенерируем ошибку |
|||
if [ "$?" -gt "0" ]; |
|||
then |
|||
echo "$ERRORLOG" >> $FILE_LOG |
|||
xmes cl-sync "$ERRORLOG" |
|||
exit 1 |
|||
fi |
|||
fi |
|||
exit 0 |
@ -0,0 +1,59 @@ |
|||
// Copyright 2007-2010 Mir Calculate Ltd. http://www.calculate-linux.org |
|||
// |
|||
// Licensed under the Apache License, Version 2.0 (the "License"); |
|||
// you may not use this file except in compliance with the License. |
|||
// You may obtain a copy of the License at |
|||
// |
|||
// http://www.apache.org/licenses/LICENSE-2.0 |
|||
// |
|||
// Unless required by applicable law or agreed to in writing, software |
|||
// distributed under the License is distributed on an "AS IS" BASIS, |
|||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
// See the License for the specific language governing permissions and |
|||
// limitations under the License. |
|||
|
|||
#include <stdio.h> |
|||
|
|||
// для пароля |
|||
#include <sys/types.h> |
|||
|
|||
// для strcpy strlen |
|||
#include <string.h> |
|||
|
|||
// для работы с ключами |
|||
#include <keyutils.h> |
|||
|
|||
char* getKey(char *login) |
|||
{ |
|||
char buffer[255]; |
|||
memset(buffer,0,sizeof(buffer)); |
|||
int ret; |
|||
// ищем номер пользовательского ключа |
|||
ret = request_key("user", login, NULL, 0); |
|||
if (ret < 0) |
|||
{ |
|||
// printf ("id_key not found\n"); |
|||
return ""; |
|||
}; |
|||
|
|||
// Возвращаем значение ключа |
|||
ret = keyctl_read(ret, buffer, sizeof(buffer)); |
|||
if (ret < 0) |
|||
{ |
|||
// printf("error keyctl_read\n"); |
|||
return ""; |
|||
}; |
|||
return buffer; |
|||
}; |
|||
|
|||
int clearKey(char *login) |
|||
{ |
|||
char *buffer; |
|||
buffer = "XXXXXXXX"; |
|||
key_serial_t dest; |
|||
dest = KEY_SPEC_USER_SESSION_KEYRING; |
|||
if (add_key("user", login, buffer, strlen(buffer), dest)!=-1) |
|||
return 0; |
|||
else |
|||
return 1; |
|||
}; |
@ -0,0 +1,7 @@ |
|||
%module cl_keys |
|||
%inline %{ |
|||
/* Put header files here or function declarations like below */ |
|||
extern char* getKey(char*); |
|||
extern int clearKey(char*); |
|||
%} |
|||
%include cl_keys.c |
@ -0,0 +1 @@ |
|||
|
1824
pym/cl_client.py
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,140 @@ |
|||
#-*- coding: utf-8 -*- |
|||
|
|||
# Copyright 2010 Mir Calculate Ltd. http://www.calculate-linux.org |
|||
# |
|||
# Licensed under the Apache License, Version 2.0 (the "License"); |
|||
# you may not use this file except in compliance with the License. |
|||
# You may obtain a copy of the License at |
|||
# |
|||
# http://www.apache.org/licenses/LICENSE-2.0 |
|||
# |
|||
# Unless required by applicable law or agreed to in writing, software |
|||
# distributed under the License is distributed on an "AS IS" BASIS, |
|||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
# See the License for the specific language governing permissions and |
|||
# limitations under the License. |
|||
from cl_client import client, __app__, __version__ |
|||
from cl_opt import opt, TitledHelpFormatter |
|||
import sys |
|||
from cl_share_cmd import share_cmd |
|||
|
|||
# Перевод сообщений для программы |
|||
from cl_lang import lang |
|||
lang().setLanguage(sys.modules[__name__]) |
|||
|
|||
# Использование программы |
|||
USAGE = _("%prog [options] domain") |
|||
|
|||
# Коментарии к использованию программы |
|||
COMMENT_EXAMPLES = _("Adds settings for connecting to domain \ |
|||
server.calculate.ru") |
|||
|
|||
# Пример использования программы |
|||
EXAMPLES = _("%prog server.calculate.ru") |
|||
|
|||
# Описание программы (что делает программа) |
|||
DESCRIPTION = _("Changes settings for connecting to domain") |
|||
|
|||
# Опции командной строки |
|||
CMD_OPTIONS = [{'shortOption':"r", |
|||
'help':_("remove the settings for connecting to a domain")}, |
|||
{'longOption':"install", |
|||
'help':_("add use of scripts this package for window manager")}, |
|||
{'longOption':"uninstall", |
|||
'help':_("remove use of scripts this package for window \ |
|||
manager and, if necessary, removes from domain")}, |
|||
{'longOption':"mount", |
|||
'help':_("mount [remote] resource for domain")}] |
|||
|
|||
class client_cmd(share_cmd): |
|||
def __init__(self): |
|||
# Объект опций командной строки |
|||
self.optobj = opt(\ |
|||
package=__app__, |
|||
version=__version__, |
|||
usage=USAGE, |
|||
examples=EXAMPLES, |
|||
comment_examples=COMMENT_EXAMPLES, |
|||
description=DESCRIPTION, |
|||
option_list=CMD_OPTIONS + opt.variable_control+opt.color_control, |
|||
formatter=TitledHelpFormatter(), |
|||
check_values=self.checkOpts) |
|||
# Создаем объект логики |
|||
self.logicObj = client() |
|||
# Создаем переменные |
|||
self.logicObj.createClVars() |
|||
# Названия несовместимых опций |
|||
self.optionsNamesIncompatible = ["r", "install", "uninstall", "mount"] |
|||
# Названия опций несовмесимых с именем домена |
|||
self.optionsNamesNotDomain = self.optionsNamesIncompatible |
|||
|
|||
def getOptionsNotDomain(self, optObj): |
|||
"""Получаем опции несовместимые с именем домена""" |
|||
retList = [] |
|||
for nameOpt in self.optionsNamesNotDomain: |
|||
retList.append(getattr(optObj, nameOpt)) |
|||
return retList |
|||
|
|||
def _getNamesAllSetOptions(self): |
|||
"""Выдает словарь измененных опций""" |
|||
setOptDict = self.optobj.values.__dict__.items() |
|||
defaultOptDict = self.optobj.get_default_values().__dict__.items() |
|||
return dict(set(setOptDict) - set(defaultOptDict)).keys() |
|||
|
|||
def getStringIncompatibleOptions(self): |
|||
"""Форматированная строка несовместимых опций разделенных ','""" |
|||
listOpt = list(set(self.optionsNamesIncompatible) &\ |
|||
set(self._getNamesAllSetOptions())) |
|||
return ", ".join(map(lambda x: len(x) == 1 and "'-%s'"%x or "'--%s'"%x,\ |
|||
listOpt)) |
|||
|
|||
def checkOpts(self, optObj, args): |
|||
"""Проверка опций командной строки""" |
|||
optionsNotDomain = self.getOptionsNotDomain(optObj) |
|||
if not args: |
|||
options = optionsNotDomain + [optObj.color, optObj.vars] |
|||
if not filter(lambda x: x, options): |
|||
errMsg = _("no such argument")+":"+" %s" %USAGE.split(" ")[-1] |
|||
self.optobj.error(errMsg) |
|||
return False |
|||
elif len(filter(lambda x: x, optionsNotDomain))>1: |
|||
errMsg = _("incompatible options")+":"+" %s"\ |
|||
%self.getStringIncompatibleOptions() |
|||
self.optobj.error(errMsg) |
|||
return False |
|||
elif filter(lambda x: x, optionsNotDomain): |
|||
errMsg = _("unnecessary argument")+":"+" %s" %USAGE.split(" ")[-1] |
|||
self.optobj.error(errMsg) |
|||
return False |
|||
if len(args)>1: |
|||
errMsg = _("incorrect argument") + ":" + " %s" %" ".join(args) |
|||
self.optobj.error(errMsg) |
|||
return False |
|||
return optObj, args |
|||
|
|||
def addDomain(self, domainName): |
|||
"""Ввод в домен""" |
|||
if domainName: |
|||
return self.logicObj.addDomain(domainName) |
|||
else: |
|||
self.printERROR(_('Not found argument domain name')) |
|||
return False |
|||
|
|||
def delDomain(self): |
|||
"""Вывод из домена""" |
|||
return self.logicObj.delDomain() |
|||
|
|||
def install(self): |
|||
"""Инсталяция""" |
|||
return self.logicObj.installClient() |
|||
|
|||
def uninstall(self): |
|||
"""Удаление""" |
|||
return self.logicObj.uninstallClient() |
|||
|
|||
def mountRemote(self): |
|||
"""Монтирование remote и домашней директории если компьютер в домене |
|||
|
|||
а так-же ввод в домен если найдено имя хоста и пароль для подключения |
|||
""" |
|||
return self.logicObj.mountRemote() |
@ -0,0 +1,19 @@ |
|||
#-*- coding: utf-8 -*- |
|||
|
|||
# Copyright 2010 Mir Calculate Ltd. http://www.calculate-linux.org |
|||
# |
|||
# Licensed under the Apache License, Version 2.0 (the "License"); |
|||
# you may not use this file except in compliance with the License. |
|||
# You may obtain a copy of the License at |
|||
# |
|||
# http://www.apache.org/licenses/LICENSE-2.0 |
|||
# |
|||
# Unless required by applicable law or agreed to in writing, software |
|||
# distributed under the License is distributed on an "AS IS" BASIS, |
|||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
# See the License for the specific language governing permissions and |
|||
# limitations under the License. |
|||
|
|||
|
|||
class fillVars(): |
|||
pass |
@ -0,0 +1,64 @@ |
|||
#-*- coding: utf-8 -*- |
|||
|
|||
# Copyright 2010 Mir Calculate Ltd. http://www.calculate-linux.org |
|||
# |
|||
# Licensed under the Apache License, Version 2.0 (the "License"); |
|||
# you may not use this file except in compliance with the License. |
|||
# You may obtain a copy of the License at |
|||
# |
|||
# http://www.apache.org/licenses/LICENSE-2.0 |
|||
# |
|||
# Unless required by applicable law or agreed to in writing, software |
|||
# distributed under the License is distributed on an "AS IS" BASIS, |
|||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
# See the License for the specific language governing permissions and |
|||
# limitations under the License. |
|||
|
|||
import sys |
|||
|
|||
from cl_print import color_print |
|||
from cl_utils import _error |
|||
|
|||
# Перевод сообщений для программы |
|||
from cl_lang import lang |
|||
lang().setLanguage(sys.modules[__name__]) |
|||
|
|||
class share_cmd(color_print, _error): |
|||
"""Класс общих методов обработки опций командной строки""" |
|||
def printVars(self, optObj): |
|||
"""Печать переменных""" |
|||
if optObj.vars: |
|||
terms = optObj.vars.split(",") |
|||
self.logicObj.printVars(terms) |
|||
|
|||
def setVars(self, optObj): |
|||
"""Установка переменных""" |
|||
if optObj.set: |
|||
for vals in optObj.set: |
|||
for val in vals.split(','): |
|||
k,o,v = val.partition('=') |
|||
if self.logicObj.clVars.exists(k): |
|||
if not self.logicObj.clVars.SetWriteVar(k,v): |
|||
return False |
|||
else: |
|||
self.printERROR(_('variable %s not found')%k) |
|||
return False |
|||
return True |
|||
|
|||
def writeVars(self, optObj): |
|||
"""Запись переменных""" |
|||
if optObj.set: |
|||
if not self.logicObj.clVars.WriteVars(): |
|||
errMsg = self.getError() |
|||
if errMsg: |
|||
self.printERROR(errMsg.strip()) |
|||
self.printERROR(_('Can not write template variables')) |
|||
return False |
|||
return True |
|||
|
|||
def setPrintNoColor(self, optObj): |
|||
"""Установка печати сообщений без цвета""" |
|||
if optObj.color and optObj.color=="never": |
|||
color_print.colorPrint = lambda *arg : sys.stdout.write(arg[-1]) or\ |
|||
sys.stdout.flush() |
|||
|
@ -0,0 +1,132 @@ |
|||
#-*- coding: utf-8 -*- |
|||
|
|||
# Copyright 2010 Mir Calculate Ltd. http://www.calculate-linux.org |
|||
# |
|||
# Licensed under the Apache License, Version 2.0 (the "License"); |
|||
# you may not use this file except in compliance with the License. |
|||
# You may obtain a copy of the License at |
|||
# |
|||
# http://www.apache.org/licenses/LICENSE-2.0 |
|||
# |
|||
# Unless required by applicable law or agreed to in writing, software |
|||
# distributed under the License is distributed on an "AS IS" BASIS, |
|||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
# See the License for the specific language governing permissions and |
|||
# limitations under the License. |
|||
from cl_client import client, __app__, __version__ |
|||
from cl_opt import opt, TitledHelpFormatter |
|||
import sys |
|||
from cl_share_cmd import share_cmd |
|||
|
|||
# Перевод сообщений для программы |
|||
from cl_lang import lang |
|||
lang().setLanguage(sys.modules[__name__]) |
|||
|
|||
# Использование программы |
|||
USAGE = _("%prog [options] user") |
|||
|
|||
# Коментарии к использованию программы |
|||
COMMENT_EXAMPLES = _("Mount resources and synchronize user profile") |
|||
|
|||
# Пример использования программы |
|||
EXAMPLES = _("%prog user_name") |
|||
|
|||
# Описание программы (что делает программа) |
|||
DESCRIPTION = _("Mounting resources and synchronize the user profile") |
|||
|
|||
# Опции командной строки |
|||
CMD_OPTIONS = [{'longOption':"progress", |
|||
'help':_("show progress bar for xdm startup")}, |
|||
{'longOption':"login", |
|||
'help':_("mount user resource and synchronize the user \ |
|||
profile")}, |
|||
{'longOption':"logout", |
|||
'help':_("synchronize the user profile and umount user \ |
|||
resource")}, |
|||
{'longOption':"nosync", |
|||
'help':_("not synchronize the user preferences, is used \ |
|||
in conjunction with the 'login' or 'logout'")}] |
|||
|
|||
class sync(share_cmd): |
|||
def __init__(self): |
|||
# Объект опций командной строки |
|||
self.optobj = opt(\ |
|||
package=__app__, |
|||
version=__version__, |
|||
usage=USAGE, |
|||
examples=EXAMPLES, |
|||
comment_examples=COMMENT_EXAMPLES, |
|||
description=DESCRIPTION, |
|||
option_list=CMD_OPTIONS + opt.variable_control+opt.color_control, |
|||
formatter=TitledHelpFormatter(), |
|||
check_values=self.checkOpts) |
|||
# Создаем объект логики |
|||
self.logicObj = client() |
|||
# Создаем переменные |
|||
self.logicObj.createClVars() |
|||
# Названия несовместимых опций |
|||
self.optionsNamesIncompatible = ["login", "logout"] |
|||
# Названия обязательных опций |
|||
self.optionsNamesRequired = self.optionsNamesIncompatible |
|||
|
|||
def getOptionsRequired(self, optObj): |
|||
"""Получаем обязательные опции""" |
|||
retList = [] |
|||
for nameOpt in self.optionsNamesRequired: |
|||
retList.append(getattr(optObj, nameOpt)) |
|||
return retList |
|||
|
|||
def _getNamesAllSetOptions(self): |
|||
"""Выдает словарь измененных опций""" |
|||
setOptDict = self.optobj.values.__dict__.items() |
|||
defaultOptDict = self.optobj.get_default_values().__dict__.items() |
|||
return dict(set(setOptDict) - set(defaultOptDict)).keys() |
|||
|
|||
def getStringIncompatibleOptions(self): |
|||
"""Форматированная строка несовместимых опций разделенных ','""" |
|||
listOpt = list(set(self.optionsNamesIncompatible) &\ |
|||
set(self._getNamesAllSetOptions())) |
|||
return ", ".join(map(lambda x: len(x) == 1 and "'-%s'"%x or "'--%s'"%x,\ |
|||
listOpt)) |
|||
|
|||
def checkOpts(self, optObj, args): |
|||
"""Проверка опций командной строки""" |
|||
optionsRequired = self.getOptionsRequired(optObj) |
|||
if not args: |
|||
errMsg = _("no such argument")+":"+" %s" %USAGE.split(" ")[-1] |
|||
self.optobj.error(errMsg) |
|||
return False |
|||
elif len(filter(lambda x: x, optionsRequired))>1: |
|||
errMsg = _("incompatible options")+":"+" %s"\ |
|||
%self.getStringIncompatibleOptions() |
|||
self.optobj.error(errMsg) |
|||
return False |
|||
elif not filter(lambda x: x, optionsRequired): |
|||
errMsg = _("required option")+":"+" %s"\ |
|||
%" or ".join(map(lambda x:\ |
|||
len(x) == 1 and "'-%s'"%x or "'--%s'"%x,\ |
|||
self.optionsNamesRequired)) |
|||
self.optobj.error(errMsg) |
|||
return False |
|||
if len(args)>1: |
|||
errMsg = _("incorrect argument") + ":" + " %s" %" ".join(args) |
|||
self.optobj.error(errMsg) |
|||
return False |
|||
return optObj, args |
|||
|
|||
def setUserName(self, userName): |
|||
"""Установка имени пользователя""" |
|||
self.logicObj.clVars.Set("ur_login", userName, True) |
|||
|
|||
|
|||
def mountUserResAndSync(self, sync=True, progress=False): |
|||
"""Монтирование ресурсов и синхронизация при входе""" |
|||
userName = self.logicObj.clVars.Get("ur_login") |
|||
return self.logicObj.mountUserResAndSync(userName, sync=sync, |
|||
progress=progress) |
|||
|
|||
def umountUserResAndSync(self, sync=True, progress=False): |
|||
"""Отмонтирование ресурсов и синхронизация при выходе""" |
|||
userName = self.logicObj.clVars.Get("ur_login") |
|||
return self.logicObj.umountUserResAndSync(userName, sync=sync, |
|||
progress=progress) |
@ -0,0 +1,64 @@ |
|||
#-*- coding: utf-8 -*- |
|||
|
|||
# Copyright 2010 Mir Calculate Ltd. http://www.calculate-linux.org |
|||
# |
|||
# Licensed under the Apache License, Version 2.0 (the "License"); |
|||
# you may not use this file except in compliance with the License. |
|||
# You may obtain a copy of the License at |
|||
# |
|||
# http://www.apache.org/licenses/LICENSE-2.0 |
|||
# |
|||
# Unless required by applicable law or agreed to in writing, software |
|||
# distributed under the License is distributed on an "AS IS" BASIS, |
|||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
# See the License for the specific language governing permissions and |
|||
# limitations under the License. |
|||
|
|||
#Допустимые ключи |
|||
# mode - режим переменной r-не переназначается из командной строки, |
|||
# w-переназначается из командной строки |
|||
# type - тип переменной состоит из двух элементов(что это и для чего |
|||
# это) |
|||
# value - значение переменной по умолчанию |
|||
# official - флаг того, что данная переменная служебная и не отображается |
|||
# при печати списка значений переменных |
|||
|
|||
from cl_client import __version__ |
|||
from cl_client import __app__ |
|||
|
|||
class Data: |
|||
# имя программы |
|||
cl_name = {'value':__app__} |
|||
|
|||
# версия программы |
|||
cl_ver = {'value':__version__} |
|||
|
|||
# ip или имя домена (под управлением calculate-server) |
|||
cl_remote_host = {'mode':'r'} |
|||
|
|||
#Логин пользователя |
|||
ur_login = {'mode':"r"} |
|||
|
|||
#Название группы пользователя |
|||
ur_group = {'mode':"r"} |
|||
|
|||
#Полное имя пользователя |
|||
ur_fullname = {'mode':"r"} |
|||
|
|||
# Jabber ID пользователя |
|||
ur_jid = {'mode':"r"} |
|||
|
|||
# Почтовый адрес пользователя |
|||
ur_mail = {'mode':"r"} |
|||
|
|||
# Режим работы клиента |
|||
# (local или имя хоста клиента) |
|||
os_remote_auth = {'mode':'w'} |
|||
|
|||
# Версия программы которой были наложены шаблоны |
|||
os_remote_client = {'mode':'w'} |
|||
|
|||
#Пароль пользователя client |
|||
cl_remote_pw = {'mode':'w'} |
|||
|
|||
|
@ -0,0 +1,70 @@ |
|||
#!/usr/bin/python |
|||
#-*- coding: utf-8 -*- |
|||
|
|||
# Copyright 2010 Mir Calculate Ltd. http://www.calculate-linux.org |
|||
# |
|||
# Licensed under the Apache License, Version 2.0 (the "License"); |
|||
# you may not use this file except in compliance with the License. |
|||
# You may obtain a copy of the License at |
|||
# |
|||
# http://www.apache.org/licenses/LICENSE-2.0 |
|||
# |
|||
# Unless required by applicable law or agreed to in writing, software |
|||
# distributed under the License is distributed on an "AS IS" BASIS, |
|||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
# See the License for the specific language governing permissions and |
|||
# limitations under the License. |
|||
|
|||
import sys |
|||
import os |
|||
sys.path.insert(0,os.path.abspath('/usr/lib/calculate-2.2/calculate-lib/pym')) |
|||
sys.path.insert(0,\ |
|||
os.path.abspath('/usr/lib/calculate-2.2/calculate-client/pym')) |
|||
|
|||
from cl_client_cmd import client_cmd |
|||
|
|||
from cl_lang import lang |
|||
tr = lang() |
|||
tr.setGlobalDomain('cl_client') |
|||
tr.setLanguage(sys.modules[__name__]) |
|||
|
|||
if __name__ == "__main__": |
|||
obj = client_cmd() |
|||
ret = obj.optobj.parse_args() |
|||
if ret is False: |
|||
sys.exit(1) |
|||
opts, args = ret |
|||
# Установка цвета при печати сообщений |
|||
obj.setPrintNoColor(opts) |
|||
# Установка переменных |
|||
if not obj.setVars(opts): |
|||
sys.exit(1) |
|||
# Печать переменных |
|||
obj.printVars(opts) |
|||
# Если нет печати переменных выполняем логику программы |
|||
if not opts.vars: |
|||
if args: |
|||
domainName = args[0] |
|||
# Ввод в домен |
|||
if not obj.addDomain(domainName): |
|||
sys.exit(1) |
|||
elif opts.r: |
|||
# Вывод из домена |
|||
if not obj.delDomain(): |
|||
sys.exit(1) |
|||
elif opts.install: |
|||
# Инсталяция |
|||
if not obj.install(): |
|||
sys.exit(1) |
|||
elif opts.uninstall: |
|||
# Удаление |
|||
if not obj.uninstall(): |
|||
sys.exit(1) |
|||
elif opts.mount: |
|||
# Монтирование remote |
|||
if not obj.mountRemote(): |
|||
sys.exit(1) |
|||
# Запись переменных |
|||
if not obj.writeVars(opts): |
|||
sys.exit(1) |
|||
sys.exit(0) |
@ -0,0 +1,63 @@ |
|||
#!/usr/bin/python |
|||
#-*- coding: utf-8 -*- |
|||
|
|||
# Copyright 2010 Mir Calculate Ltd. http://www.calculate-linux.org |
|||
# |
|||
# Licensed under the Apache License, Version 2.0 (the "License"); |
|||
# you may not use this file except in compliance with the License. |
|||
# You may obtain a copy of the License at |
|||
# |
|||
# http://www.apache.org/licenses/LICENSE-2.0 |
|||
# |
|||
# Unless required by applicable law or agreed to in writing, software |
|||
# distributed under the License is distributed on an "AS IS" BASIS, |
|||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
# See the License for the specific language governing permissions and |
|||
# limitations under the License. |
|||
|
|||
import sys |
|||
import os |
|||
sys.path.insert(0,os.path.abspath('/usr/lib/calculate-2.2/calculate-lib/pym')) |
|||
sys.path.insert(0,\ |
|||
os.path.abspath('/usr/lib/calculate-2.2/calculate-client/pym')) |
|||
|
|||
from cl_sync import sync |
|||
|
|||
from cl_lang import lang |
|||
tr = lang() |
|||
tr.setGlobalDomain('cl_desktop') |
|||
tr.setLanguage(sys.modules[__name__]) |
|||
|
|||
if __name__ == "__main__": |
|||
obj = sync() |
|||
ret = obj.optobj.parse_args() |
|||
if ret is False: |
|||
sys.exit(1) |
|||
opts, args = ret |
|||
userName = args[0] |
|||
# Установка цвета при печати сообщений |
|||
obj.setPrintNoColor(opts) |
|||
# Установка имени пользователя |
|||
obj.setUserName(userName) |
|||
# Установка переменных |
|||
if not obj.setVars(opts): |
|||
sys.exit(1) |
|||
# Печать переменных |
|||
obj.printVars(opts) |
|||
# Если нет печати переменных выполняем логику программы |
|||
if not opts.vars: |
|||
sync = not opts.nosync |
|||
if opts.login: |
|||
# Монтирование ресурсов и синхронизация при входе |
|||
if not obj.mountUserResAndSync(sync=sync, |
|||
progress=opts.progress): |
|||
sys.exit(1) |
|||
elif opts.logout: |
|||
# Отмонтирование ресурсов и синхронизация при выходе |
|||
if not obj.umountUserResAndSync(sync=sync, |
|||
progress=opts.progress): |
|||
sys.exit(1) |
|||
# Запись переменных |
|||
if not obj.writeVars(opts): |
|||
sys.exit(1) |
|||
sys.exit(0) |
@ -0,0 +1,5 @@ |
|||
[install] |
|||
install-scripts=/usr/bin |
|||
install-purelib=/usr/lib/calculate-2.2 |
|||
install-platlib=/usr/lib/calculate-2.2 |
|||
install-data=/usr/share/calculate-2.2/templates |
@ -0,0 +1,121 @@ |
|||
#!/usr/bin/env python |
|||
# -*- coding: utf-8 -*- |
|||
|
|||
# setup.py --- Setup script for calculate-client |
|||
|
|||
#Copyright 2010 Calculate Pack, http://www.calculate-linux.org |
|||
# |
|||
# Licensed under the Apache License, Version 2.0 (the "License"); |
|||
# you may not use this file except in compliance with the License. |
|||
# You may obtain a copy of the License at |
|||
# |
|||
# http://www.apache.org/licenses/LICENSE-2.0 |
|||
# |
|||
# Unless required by applicable law or agreed to in writing, software |
|||
# distributed under the License is distributed on an "AS IS" BASIS, |
|||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
# See the License for the specific language governing permissions and |
|||
# limitations under the License. |
|||
|
|||
import os |
|||
import stat |
|||
from distutils.core import setup, Extension |
|||
from distutils.command.install_data import install_data |
|||
|
|||
__version__ = "2.2.0" |
|||
__app__ = "calculate-client" |
|||
|
|||
|
|||
data_files = [] |
|||
|
|||
var_data_files = [] |
|||
|
|||
data_dirs_template = ['client'] |
|||
data_dirs_share = ['i18n'] |
|||
share_calculate_dir = "/usr/share/calculate-2.2/" |
|||
template_calculate_dir = os.path.join(share_calculate_dir, "templates") |
|||
|
|||
|
|||
def __scanDir(scanDir, prefix, dirData, flagDir=False): |
|||
"""Scan directory""" |
|||
files = [] |
|||
dirs = [] |
|||
if flagDir or stat.S_ISDIR(os.stat(scanDir)[stat.ST_MODE]): |
|||
for fileOrDir in os.listdir(scanDir): |
|||
absPath = os.path.join(scanDir,fileOrDir) |
|||
statInfo = os.stat(absPath)[stat.ST_MODE] |
|||
if stat.S_ISREG(statInfo): |
|||
files.append(absPath) |
|||
elif stat.S_ISDIR(statInfo): |
|||
dirs.append(absPath) |
|||
if prefix: |
|||
scanDir = os.path.join(prefix,scanDir) |
|||
dirData.append((scanDir, files)) |
|||
for sDir in dirs: |
|||
__scanDir(sDir, prefix, dirData, True) |
|||
return dirData |
|||
|
|||
def create_data_files(data_dirs, prefix=""): |
|||
"""Create data_files""" |
|||
data_files = [] |
|||
for data_dir in data_dirs: |
|||
data = [] |
|||
data_files += __scanDir(data_dir, prefix, data) |
|||
return data_files |
|||
|
|||
|
|||
data_files += create_data_files (data_dirs_template, template_calculate_dir) |
|||
data_files += create_data_files (data_dirs_share, share_calculate_dir) |
|||
data_files += [('/etc/init.d', ['data/client'])] |
|||
data_files += [('/etc/calculate/xdm/login.d', ['data/login.d/10client'])] +\ |
|||
[('/etc/calculate/xdm/logout.d', [])] +\ |
|||
[('/var/calculate/templates', [])] |
|||
|
|||
|
|||
class cl_install_data(install_data): |
|||
def run (self): |
|||
install_data.run(self) |
|||
data_file = [("/etc/init.d/client",0755)] |
|||
fileNames = map(lambda x: os.path.split(x[0])[1], data_file) |
|||
listNames = map(lambda x: filter(lambda y: y, x[0].split("/")),data_file) |
|||
data_find = {} |
|||
for i in range(len(fileNames)): |
|||
listNames[i].reverse() |
|||
data_find[fileNames[i]] =[listNames[i],data_file[i][1]] |
|||
|
|||
for path in self.get_outputs(): |
|||
nameFile = os.path.split(path)[1] |
|||
if nameFile in data_find.keys(): |
|||
data = data_find[nameFile][0] |
|||
mode = data_find[nameFile][1] |
|||
flagFound = True |
|||
iMax = len(data) |
|||
pathFile = path |
|||
for i in range(iMax): |
|||
if data[i] != os.path.split(pathFile)[1]: |
|||
flagFound = False |
|||
break |
|||
pathFile = os.path.split(pathFile)[0] |
|||
if flagFound: |
|||
os.chmod(path, mode) |
|||
|
|||
|
|||
setup( |
|||
name = __app__, |
|||
version = __version__, |
|||
description = "Mounting resources and synchronize the user profile", |
|||
author = "Mir Calculate Ltd.", |
|||
author_email = "support@calculate.ru", |
|||
url = "http://calculate-linux.org", |
|||
license = "http://www.apache.org/licenses/LICENSE-2.0", |
|||
package_dir = {'calculate-client': "."}, |
|||
packages = ['calculate-client.pym'], |
|||
data_files = data_files, |
|||
scripts=["./scripts/cl-sync-2.2", |
|||
"./scripts/cl-client-2.2"], |
|||
ext_modules = [Extension('calculate-client.pym._cl_keys', |
|||
library_dirs = ['/usr/lib'], |
|||
libraries = ['keyutils'], |
|||
sources = ['./lib/cl_keys.i', './lib/cl_keys.c'])], |
|||
cmdclass={'install_data': cl_install_data}, |
|||
) |
Write
Preview
Loading…
Cancel
Save
Reference in new issue