diff options
| author | Selvasundaram <selvam@gluster.com> | 2011-08-10 21:24:22 +0530 |
|---|---|---|
| committer | Selvasundaram <selvam@gluster.com> | 2011-08-10 21:24:22 +0530 |
| commit | 25dfeacd5d56923cbdeaefbb89281737e4030485 (patch) | |
| tree | 0f8fe106adcd34166894d446974fc36a3f55a747 /src | |
| parent | a26edbc55a5f80fb0ec333f3a043b3cfc6068cef (diff) | |
| parent | 457201bb104d84f74c9a27495834d9b730012210 (diff) | |
Merge branch 'master' of github.com:gluster/console
Diffstat (limited to 'src')
| -rw-r--r-- | src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java | 17 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.console.feature.webstart/rootfiles/gluster-management-console.jnlp | 2 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.console.feature.webstart/rootfiles/splash.jpg | bin | 44264 -> 0 bytes | |||
| -rw-r--r-- | src/com.gluster.storage.management.console.feature.webstart/rootfiles/splash.png | bin | 0 -> 160250 bytes | |||
| -rw-r--r-- | src/com.gluster.storage.management.console/icons/tango/32x32/migrate-brick-disabled.png | bin | 0 -> 2591 bytes | |||
| -rw-r--r-- | src/com.gluster.storage.management.console/icons/tango/32x32/migrate-brick.png (renamed from src/com.gluster.storage.management.console/icons/tango/32x32/replace-brick.png) | bin | 2343 -> 2343 bytes | |||
| -rw-r--r-- | src/com.gluster.storage.management.console/plugin.properties | 2 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.console/plugin.xml | 3 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.console/splash.bmp | bin | 398896 -> 398896 bytes | |||
| -rw-r--r-- | src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/IImageKeys.java | 4 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java | 3 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.gateway.scripts/src/Common.py | 20 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.gateway.scripts/src/Globals.py | 131 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.gateway.scripts/src/Utils.py | 1086 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.gateway.scripts/src/backend/Commands.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/Commands.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/Disk.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/Disk.py) | 0 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.gateway.scripts/src/backend/DiskUtils.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/DiskUtils.py) | 0 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.gateway.scripts/src/backend/FsTabUtils.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/FsTabUtils.py) | 0 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.gateway.scripts/src/backend/GetServerNetworkConfig.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/GetServerNetworkConfig.py) | 0 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.gateway.scripts/src/backend/GlusterdUtils.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/GlusterdUtils.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/NetworkUtils.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/NetworkUtils.py) | 0 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.gateway.scripts/src/backend/RRDUtils.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/RRDUtils.py) | 0 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.gateway.scripts/src/backend/ServerUtils.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/ServerUtils.py) | 0 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.gateway.scripts/src/backend/VolumeUtils.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/VolumeUtils.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/add_user_cifs.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/add_user_cifs.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/clear_volume_directory.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/clear_volume_directory.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/create_volume_cifs.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/create_volume_cifs.py) | 16 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/create_volume_directory.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/create_volume_directory.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/delete_user_cifs.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/delete_user_cifs.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/delete_volume_cifs.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/delete_volume_cifs.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/disable-ssh-password-auth.sh (renamed from src/com.gluster.storage.management.gateway.scripts/src/disable-ssh-password-auth.sh) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/format_device.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/format_device.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/get_brick_status.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/get_brick_status.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/get_disk_mount_point.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/get_disk_mount_point.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/get_disk_name_by_path.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/get_disk_name_by_path.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/get_file.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/get_file.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/get_format_device_status.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/get_format_device_status.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/get_rrd_cpu_details.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/get_rrd_cpu_details.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/get_rrd_memory_details.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/get_rrd_memory_details.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/get_rrd_net_details.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/get_rrd_net_details.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/get_server_details.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/get_server_details.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/get_server_status.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/get_server_status.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/get_volume_brick_log.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/get_volume_brick_log.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/get_volume_log.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/get_volume_log.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/gluster_provision_block_wrapper.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/gluster_provision_block_wrapper.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/modify_volume_cifs.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/modify_volume_cifs.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/multicast-discoverd.init.d (renamed from src/com.gluster.storage.management.gateway.scripts/src/multicast-discoverd.init.d) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/multicast-discoverd.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/multicast-discoverd.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/rrd_cpu.pl (renamed from src/com.gluster.storage.management.gateway.scripts/src/rrd_cpu.pl) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/rrd_mem.pl (renamed from src/com.gluster.storage.management.gateway.scripts/src/rrd_mem.pl) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/rrd_net.pl (renamed from src/com.gluster.storage.management.gateway.scripts/src/rrd_net.pl) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/rrd_update_cpu_details.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/rrd_update_cpu_details.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/rrd_update_memory_details.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/rrd_update_memory_details.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/setup_cifs_config.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/setup_cifs_config.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/start_volume_cifs.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/start_volume_cifs.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/stop_volume_cifs.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/stop_volume_cifs.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/backend/update_volume_cifs.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/update_volume_cifs.py) | 0 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.gateway.scripts/src/common/Globals.py (renamed from src/com.gluster.storage.management.gateway/WebContent/scripts/Globals.py) | 4 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.gateway.scripts/src/common/Globals.pyc | bin | 0 -> 4718 bytes | |||
| -rw-r--r-- | src/com.gluster.storage.management.gateway.scripts/src/common/Protocol.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/Protocol.py) | 0 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.gateway.scripts/src/common/Protocol.pyc | bin | 0 -> 16852 bytes | |||
| -rw-r--r-- | src/com.gluster.storage.management.gateway.scripts/src/common/Utils.py (renamed from src/com.gluster.storage.management.gateway/WebContent/scripts/Utils.py) | 17 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.gateway.scripts/src/common/Utils.pyc | bin | 0 -> 37088 bytes | |||
| -rw-r--r-- | src/com.gluster.storage.management.gateway.scripts/src/common/XmlHandler.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/XmlHandler.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/gateway/add_user_cifs_all.py (renamed from src/com.gluster.storage.management.gateway/WebContent/scripts/add_user_cifs_all.py) | 23 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/gateway/create_volume_cifs_all.py (renamed from src/com.gluster.storage.management.gateway/WebContent/scripts/create_volume_cifs_all.py) | 21 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/gateway/delete_user_cifs_all.py (renamed from src/com.gluster.storage.management.gateway/WebContent/scripts/delete_user_cifs_all.py) | 14 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/gateway/delete_volume_cifs_all.py (renamed from src/com.gluster.storage.management.gateway/WebContent/scripts/delete_volume_cifs_all.py) | 12 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/gateway/get_volume_user_cifs.py (renamed from src/com.gluster.storage.management.gateway/WebContent/scripts/get_volume_user_cifs.py) | 12 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/gateway/gmg-reset-password.sh (renamed from src/com.gluster.storage.management.gateway/WebContent/scripts/gmg-reset-password.sh) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/gateway/grun.py (renamed from src/com.gluster.storage.management.gateway/WebContent/scripts/grun.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/gateway/multicast-discover-servers.py (renamed from src/com.gluster.storage.management.gateway/WebContent/scripts/multicast-discover-servers.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/gateway/setup_cifs_config_all.py (renamed from src/com.gluster.storage.management.gateway/WebContent/scripts/setup_cifs_config_all.py) | 0 | ||||
| -rwxr-xr-x | src/com.gluster.storage.management.gateway.scripts/src/gateway/update_volume_cifs_all.py (renamed from src/com.gluster.storage.management.gateway/WebContent/scripts/update_volume_cifs_all.py) | 22 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.gateway/WebContent/scripts/Protocol.py | 438 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.gateway/WebContent/scripts/XmlHandler.py | 346 | ||||
| -rw-r--r-- | src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/UsersResource.java | 18 |
77 files changed, 118 insertions, 2093 deletions
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java index 6722708b..4e89e994 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java @@ -18,16 +18,17 @@ *******************************************************************************/ package com.gluster.storage.management.client; +import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_NEW_PASSWORD; +import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_OLD_PASSWORD; + +import com.gluster.storage.management.core.constants.RESTConstants; +import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; import com.gluster.storage.management.core.model.Status; import com.sun.jersey.api.representation.Form; import com.sun.jersey.core.util.Base64; public class UsersClient extends AbstractClient { - private static final String RESOURCE_NAME = "users"; - private static final String FORM_PARAM_OLD_PASSWORD = "oldpassword"; - private static final String FORM_PARAM_NEW_PASSWORD = "newpassword"; - private String generateSecurityToken(String user, String password) { return new String(Base64.encode(user + ":" + password)); } @@ -42,7 +43,11 @@ public class UsersClient extends AbstractClient { } public void changePassword(String user, String oldPassword, String newPassword) { - setSecurityToken(generateSecurityToken(user, oldPassword)); + String oldSecurityToken = getSecurityToken(); + String newSecurityToken = generateSecurityToken(user, oldPassword); + if(!oldSecurityToken.equals(newSecurityToken)) { + throw new GlusterRuntimeException("Invalid old password!"); + } Form form = new Form(); form.add(FORM_PARAM_OLD_PASSWORD, oldPassword); @@ -76,7 +81,7 @@ public class UsersClient extends AbstractClient { */ @Override public String getResourcePath() { - return RESOURCE_NAME; + return RESTConstants.RESOURCE_USERS; } /* diff --git a/src/com.gluster.storage.management.console.feature.webstart/rootfiles/gluster-management-console.jnlp b/src/com.gluster.storage.management.console.feature.webstart/rootfiles/gluster-management-console.jnlp index 4d0dc72c..f87631df 100644 --- a/src/com.gluster.storage.management.console.feature.webstart/rootfiles/gluster-management-console.jnlp +++ b/src/com.gluster.storage.management.console.feature.webstart/rootfiles/gluster-management-console.jnlp @@ -5,7 +5,7 @@ <vendor>Gluster Inc.</vendor> <homepage href="$$codebase" /> <description>Gluster Management Console</description> - <icon kind="splash" href="splash.jpg"/> + <icon kind="splash" href="splash.png"/> <shortcut online="true"> <desktop/> diff --git a/src/com.gluster.storage.management.console.feature.webstart/rootfiles/splash.jpg b/src/com.gluster.storage.management.console.feature.webstart/rootfiles/splash.jpg Binary files differdeleted file mode 100644 index de8b5219..00000000 --- a/src/com.gluster.storage.management.console.feature.webstart/rootfiles/splash.jpg +++ /dev/null diff --git a/src/com.gluster.storage.management.console.feature.webstart/rootfiles/splash.png b/src/com.gluster.storage.management.console.feature.webstart/rootfiles/splash.png Binary files differnew file mode 100644 index 00000000..293329da --- /dev/null +++ b/src/com.gluster.storage.management.console.feature.webstart/rootfiles/splash.png diff --git a/src/com.gluster.storage.management.console/icons/tango/32x32/migrate-brick-disabled.png b/src/com.gluster.storage.management.console/icons/tango/32x32/migrate-brick-disabled.png Binary files differnew file mode 100644 index 00000000..8a1e82a7 --- /dev/null +++ b/src/com.gluster.storage.management.console/icons/tango/32x32/migrate-brick-disabled.png diff --git a/src/com.gluster.storage.management.console/icons/tango/32x32/replace-brick.png b/src/com.gluster.storage.management.console/icons/tango/32x32/migrate-brick.png Binary files differindex 999332a5..999332a5 100644 --- a/src/com.gluster.storage.management.console/icons/tango/32x32/replace-brick.png +++ b/src/com.gluster.storage.management.console/icons/tango/32x32/migrate-brick.png diff --git a/src/com.gluster.storage.management.console/plugin.properties b/src/com.gluster.storage.management.console/plugin.properties index 1efd6934..6a93e73d 100644 --- a/src/com.gluster.storage.management.console/plugin.properties +++ b/src/com.gluster.storage.management.console/plugin.properties @@ -1,6 +1,6 @@ aboutText=Gluster Management Console\n\ Version: 1.0.0\n\n\ -(c) Copyright Gluster, Inc. 2011. All rights reserved.\n\ +Copyright (c) 2011 Gluster, Inc.\n\ Visit http://www.gluster.com/\n\n\ This product includes software developed by the\n\ Eclipse Foundation http://eclipse.org/
\ No newline at end of file diff --git a/src/com.gluster.storage.management.console/plugin.xml b/src/com.gluster.storage.management.console/plugin.xml index 9e799d49..60316263 100644 --- a/src/com.gluster.storage.management.console/plugin.xml +++ b/src/com.gluster.storage.management.console/plugin.xml @@ -506,7 +506,8 @@ allowLabelUpdate="false" class="com.gluster.storage.management.console.actions.MigrateBrickAction" definitionId="com.gluster.storage.management.console.commands.MigrateDisk" - icon="icons/tango/32x32/replace-brick.png" + disabledIcon="icons/tango/32x32/migrate-brick-disabled.png" + icon="icons/tango/32x32/migrate-brick.png" id="com.gluster.storage.management.console.actions.MigrateDiskAction" label="&Migrate Brick" menubarPath="com.gluster.storage.management.console.menu.volume/volume" diff --git a/src/com.gluster.storage.management.console/splash.bmp b/src/com.gluster.storage.management.console/splash.bmp Binary files differindex c70f24c6..cb190cd4 100644 --- a/src/com.gluster.storage.management.console/splash.bmp +++ b/src/com.gluster.storage.management.console/splash.bmp diff --git a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/IImageKeys.java b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/IImageKeys.java index 67590b27..2b20cb02 100644 --- a/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/IImageKeys.java +++ b/src/com.gluster.storage.management.console/src/com/gluster/storage/management/console/IImageKeys.java @@ -34,8 +34,8 @@ public interface IImageKeys { public static final String REMOVE_VOLUME_32x32 = "icons/tango/32x32/remove-volume.png"; public static final String VOLUME_REBALANCE_32x32 = "icons/tango/32x32/volume-rebalance.png"; public static final String VOLUME_REBALANCE_22x22 = "icons/tango/22x22/volume-rebalance.png"; - public static final String BRICK_MIGRATE_32x32 = "icons/tango/32x32/replace-brick.png"; - public static final String BRICK_MIGRATE_22x22 = "icons/tango/22x22/replace-brick.png"; + public static final String BRICK_MIGRATE_32x32 = "icons/tango/32x32/migrate-brick.png"; + public static final String BRICK_MIGRATE_22x22 = "icons/tango/22x22/migrate-brick.png"; public static final String ADD_BRICK_32x32 = "icons/tango/32x32/add-brick.png"; public static final String REMOVE_BRICK_32x32 = "icons/tango/32x32/remove-brick.png"; public static final String BRICK_OFFLINE_22x22 = "icons/tango/22x22/offline-brick.png"; diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java index 737f4d7b..97b83f70 100644 --- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java +++ b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java @@ -43,6 +43,7 @@ public class RESTConstants { public static final String RESOURCE_TASKS = "tasks"; public static final String RESOURCE_KEYS = "keys"; public static final String RESOURCE_STATISTICS = "statistics"; + public static final String RESOURCE_USERS = "users"; public static final String TASK_START = "start"; public static final String TASK_PAUSE = "pause"; @@ -81,6 +82,8 @@ public class RESTConstants { public static final String FORM_PARAM_FIX_LAYOUT = "fix-layout"; public static final String FORM_PARAM_MIGRATE_DATA = "migrate-data"; public static final String FORM_PARAM_FORCED_DATA_MIGRATE = "forced-data-migrate"; + public static final String FORM_PARAM_OLD_PASSWORD = "oldpassword"; + public static final String FORM_PARAM_NEW_PASSWORD = "newpassword"; public static final String PATH_PARAM_FORMAT = "format"; public static final String PATH_PARAM_VOLUME_NAME = "volumeName"; diff --git a/src/com.gluster.storage.management.gateway.scripts/src/Common.py b/src/com.gluster.storage.management.gateway.scripts/src/Common.py deleted file mode 100644 index 70b2157a..00000000 --- a/src/com.gluster.storage.management.gateway.scripts/src/Common.py +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2009 Gluster, Inc. <http://www.gluster.com> -# This file is part of GlusterSP. -# -# GlusterSP is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published -# by the Free Software Foundation; either version 3 of the License, -# or (at your option) any later version. -# -# GlusterSP is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see -# <http://www.gnu.org/licenses/>. - -import sys -import syslog - diff --git a/src/com.gluster.storage.management.gateway.scripts/src/Globals.py b/src/com.gluster.storage.management.gateway.scripts/src/Globals.py deleted file mode 100644 index d5cb1ae0..00000000 --- a/src/com.gluster.storage.management.gateway.scripts/src/Globals.py +++ /dev/null @@ -1,131 +0,0 @@ -# Copyright (C) 2010 Gluster, Inc. <http://www.gluster.com> -# This file is part of Gluster Storage Platform. -# -# Gluster Storage Platform is free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 3 of -# the License, or (at your option) any later version. -# -# Gluster Storage Platform is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see -# <http://www.gnu.org/licenses/>. - -MULTICAST_GROUP = '224.224.1.1' -MULTICAST_PORT = 24729 -GLUSTER_PROBE_STRING = "GLUSTERPROBE" -GLUSTER_PROBE_VERSION = "1.0.0" -DEFAULT_BUFSIZE = 1024 -SERVER_PORT = 24731 -DEFAULT_BACKLOG = 5 -DEFAULT_TIMEOUT = 5 -DEFAULT_ID_LENGTH = 16 - -GLUSTER_PLATFORM_VERSION = "3.2" - -## System configuration constants -SYSCONFIG_NETWORK_DIR = "/etc/sysconfig/network-scripts" -DNSMASQ_CONF_DIR = "/etc/dnsmasq.d" - -FSTAB_FILE = "/etc/fstab" -NFS_EXPORTS_FILE = "/etc/exports" -SAMBA_CONF_FILE = "/etc/samba/smb.conf" -TIMEZONE_FILE = "/etc/timezone" -ZONEINFO_DIR = "/usr/share/zoneinfo" -LOCALTIME_FILE = "/etc/localtime" -KERBEROS_CONF_FILE = "/etc/krb5.conf" -NSSWITCH_CONF_FILE = "/etc/nsswitch.conf" -NTP_CONF_FILE = "/etc/ntp.conf" -MODPROBE_CONF_FILE = "/etc/modprobe.d/bonding.conf" -SYSCONFIG_NETWORK_FILE = "/etc/sysconfig/network" -RESOLV_CONF_FILE = "/etc/resolv.conf" -DNSMASQ_LEASE_FILE = "/var/tmp/dnsmasq.leases" -LIVE_MODE_FILE = "/etc/live" -ADD_SERVER_COMPLETED_FILE = "/var/tmp/installation-completed" - -DNSMASQ_DNS_CONF_FILE = DNSMASQ_CONF_DIR + "/dns.conf" -DNSMASQ_DHCP_CONF_FILE = DNSMASQ_CONF_DIR + "/dhcp.conf" -## - -## Base constants -MAX_PARTITION_SIZE = 16777216 # 16 TB -OS_PARTITION_SIZE = 4000 # 4 GB -SESSION_TIMEOUT = 1800 # 30 minutes -SERVER_AGENT_PORT = 50000 - -BOOT_PARTITION_LABEL = "GLUSTEROS" -DATA_PARTITION_LABEL = "GLUSTERDATA" -VOLUME_USER_DESCRIPTION = "Gluster Volume User" -SERVER_AGENT_RUN_USERNAME = "gluster" -INSTALLER_SERVER_NAME = "$installer$" - -GLUSTER_BASE_DIR = "/etc/glustermg" -GLUSTER_LUN_DIR = "/data" -REEXPORT_DIR = "/reexport" -NFS_EXPORT_DIR = "/nfs" -CIFS_EXPORT_DIR = "/cifs" -WEBDAV_DOCUMENT_ROOT_DIR = "/var/www/html" -UPDATES_DIR = "/UPDATES" -TRANSPORT_HOME_DIR = "/transport" -GLUSTERFS_LOG_DIR = "/var/log/glusterfs" -LOG_DIR = "/var/log/glustermg" - -GLUSTER_UPDATES_FILE = "updates.xml" -INSTALLER_STATUS_FILE = "/var/log/install-server-status.log" -INSTALL_PLATFORM_LOCK_FILE = "/var/lock/install-gluster-platform.lock" -LAST_ACCESSED_NETWORK_FILE = "last-accessed-network" -PREPARE_DATA_DISK_LOCK_FILE = "/var/tmp/prepare-data-disk.lock" -## - -## Derived constants -GLUSTER_CONF_DIR = GLUSTER_BASE_DIR + "/conf" -GLUSTER_TMP_DIR = GLUSTER_BASE_DIR + "/tmp" -VOLUME_CONF_DIR = GLUSTER_BASE_DIR + "/volumes" -SERVER_CONF_DIR = GLUSTER_BASE_DIR + "/servers" -DNS_RECORDS_DIR = GLUSTER_BASE_DIR + "/dns-records" -INSTALLER_CONF_DIR = SERVER_CONF_DIR + "/" + INSTALLER_SERVER_NAME - -GSN_USER_INFO_FILE = GLUSTER_BASE_DIR + "/gsn-user.info" -GLUSTER_VERSION_FILE = GLUSTER_BASE_DIR + "/version" -GLUSTER_UPDATE_SITE_FILE = GLUSTER_BASE_DIR + "/update-site" -GLUSTER_DIRECTORY_SERVICE_CONF_FILE = GLUSTER_BASE_DIR + "/directory.xml" -GLUSTER_TIME_CONF_FILE = GLUSTER_BASE_DIR + "/timeconfig.xml" -TRANSACTION_KEY_FILE = GLUSTER_BASE_DIR + "/transaction.key" -SERVER_COUNT_FILE = GLUSTER_BASE_DIR + "/server-count" -SIGNATURE_FILE = GLUSTER_BASE_DIR + "/.signature" -GLUSTER_SERVER_POOL_FILE = GLUSTER_BASE_DIR + "/pool" -GLUSTER_ADMIN_FILE = GLUSTER_BASE_DIR + "/.password" - -VOLUME_SMBCONF_FILE = VOLUME_CONF_DIR + "/volumes.smbconf.list" - -GLOBAL_NETWORK_FILE = INSTALLER_CONF_DIR + "/network.xml" -INSTALL_SERVER_CONF_FILE = INSTALLER_CONF_DIR + "/installer.xml" -INSTALLER_INFO_FILE = INSTALLER_CONF_DIR + "/installer.info" -INSTALLED_SERVER_COUNT_FILE = INSTALLER_CONF_DIR + "/installed-server-count" - -SESSION_FILE = GLUSTER_TMP_DIR + "/login.sessions" - -GENERAL_LOG_FILE = LOG_DIR + "/general.log" -INSTALLER_LOG_FILE = LOG_DIR + "/installer.log" -PEER_AGENT_LOG_FILE = LOG_DIR + "/peeragent.log" -SERVER_AGENT_LOG_FILE = LOG_DIR + "/serveragent.log" -TRANSPORT_AGENT_LOG_FILE = LOG_DIR + "/transport.log" -## - - -## Global variables -## TODO: These should be removed -DOWNLOAD_GLUSTER_UPDATE_PROCESS = None -DOWNLOAD_GLUSTER_UPDATE_LEVEL = None -DOWNLOAD_GLUSTER_CURRENT_UPDATE_LEVEL = None -DOWNLOAD_GLUSTER_UPDATE_MD5SUM = None -REQUEST_MAP = {} -VERSION_DICTONARY = {} -## - -AWS_WEB_SERVICE_URL = "http://169.254.169.254/latest" -REAL_SAMBA_CONF_FILE = "/etc/samba/real.smb.conf" diff --git a/src/com.gluster.storage.management.gateway.scripts/src/Utils.py b/src/com.gluster.storage.management.gateway.scripts/src/Utils.py deleted file mode 100644 index 82f8b7b6..00000000 --- a/src/com.gluster.storage.management.gateway.scripts/src/Utils.py +++ /dev/null @@ -1,1086 +0,0 @@ -# Copyright (c) 2010 Gluster, Inc. <http://www.gluster.com> -# This file is part of Gluster Storage Platform. -# -# Gluster Storage Platform is free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 3 of -# the License, or (at your option) any later version. -# -# Gluster Storage Platform is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see -# <http://www.gnu.org/licenses/>. - -import os -import sys -p1 = os.path.abspath(os.path.dirname(sys.argv[0])) -p2 = "%s/common" % os.path.dirname(p1) -if not p1 in sys.path: - sys.path.append(p1) -if not p2 in sys.path: - sys.path.append(p2) -import re -import socket -import struct -import syslog -import subprocess -#import spwd -import time -#import uuid -import tempfile -import grp -import pwd -import inspect -from datetime import datetime -import urllib - -import Globals -import Protocol - -RUN_COMMAND_ERROR = -1024 -LOG_SYSLOG = 1 -SYSLOG_REQUIRED = False -LOG_FILE_NAME = None -LOG_FILE_OBJ = None - - -def _getLogCode(priority): - if syslog.LOG_EMERG == priority: - return "M" - elif syslog.LOG_ALERT == priority: - return "A" - elif syslog.LOG_CRIT == priority: - return "C" - elif syslog.LOG_ERR == priority: - return "E" - elif syslog.LOG_WARNING == priority: - return "W" - elif syslog.LOG_NOTICE == priority: - return "N" - elif syslog.LOG_INFO == priority: - return "I" - elif syslog.LOG_DEBUG == priority: - return "D" - else: # UNKNOWN - return "X" - - -def setLogFile(fileName): - global LOG_FILE_NAME - - if fileName: - LOG_FILE_NAME = fileName - return True - return False - - -def closeLog(): - global LOG_FILE_OBJ - global SYSLOG_REQUIRED - - if SYSLOG_REQUIRED: - syslog.closelog() - SYSLOG_REQUIRED = False - return True - - if LOG_FILE_OBJ: - try: - LOG_FILE_OBJ.close() - LOG_FILE_OBJ = None - except IOError, e: - sys.stderr.write("Failed to close file: %s\n" % e) - return False - return True - - -def openLog(fileName=None): - global LOG_FILE_NAME - global LOG_FILE_OBJ - global SYSLOG_REQUIRED - - if fileName == LOG_SYSLOG: - syslog.openlog(os.path.basename(sys.argv[0])) - SYSLOG_REQUIRED = True - return True - - if fileName: - LOG_FILE_NAME = fileName - - if not LOG_FILE_NAME: - return False - - closeLog() - - try: - LOG_FILE_OBJ = open(LOG_FILE_NAME, "a") - except IOError, e: - sys.stderr.write("Failed to open file %s: %s\n" % (LOG_FILE_NAME, e)) - return False - return True - -def record(priority, message=None): - global LOG_FILE_OBJ - global SYSLOG_REQUIRED - - stack = inspect.stack()[1] - if stack[3] == "<module>": - prefix = "%s:%s:%s" % (stack[1], stack[2], stack[3]) - else: - prefix = "%s:%s:%s()" % (stack[1], stack[2], stack[3]) - - if type(priority) == type("") or type(priority) == type(u""): - logPriority = syslog.LOG_INFO - logMessage = priority - else: - logPriority = priority - logMessage = message - - if SYSLOG_REQUIRED: - syslog.syslog(logPriority, "[%s]: %s" % (prefix, logMessage)) - return - - fp = sys.stderr - if LOG_FILE_OBJ: - fp = LOG_FILE_OBJ - - fp.write("[%s] %s [%s]: %s" % (str(datetime.now()), _getLogCode(logPriority), prefix, logMessage)) - if logMessage[-1] != '\n': - fp.write("\n") - fp.flush() - return - - -def trace(message): - if message: - log(syslog.LOG_DEBUG, message) - - -def isString(value): - return (type(value) == type("") or type(value) == type(u"")) - - -def getTempFileName(): - filedesc, filename = tempfile.mkstemp(prefix="GSP_") - os.close(filedesc) - return filename - - -def runCommandBG(command, stdinFileObj=None, stdoutFileObj=None, stderrFileObj=None, - shell=False, root=None): - log("runCommandBG(): Trying to execute command [%s]" % command) - - if shell: - if not isString(command): - return None - else: - if isString(command): - command = command.split() - - if root == True: - if shell: - command = "sudo " + command - else: - command = ['sudo'] + command - elif isString(root): - if shell: - command = "sudo -u " + root + " " + command - else: - command = ['sudo', '-u', root] + command - - if not stdinFileObj: - stdinFileObj=subprocess.PIPE - if not stdoutFileObj: - stdoutFileObj=subprocess.PIPE - if not stderrFileObj: - stderrFileObj=subprocess.PIPE - - try: - process = subprocess.Popen(command, - bufsize=-1, - stdin=stdinFileObj, - stdout=stdoutFileObj, - stderr=stderrFileObj, - shell=shell) - return process - except OSError, e: - log("runCommandBG(): Failed to run command [%s]: %s" % (command, e)) - return None - - -def runCommand(command, - input='', output=False, - shell=False, root=None): - rv = {} - rv["Status"] = RUN_COMMAND_ERROR - rv["Stdout"] = None - rv["Stderr"] = None - - try: - stdinFileName = getTempFileName() - stdinFileObj = open(stdinFileName, "w") - stdinFileObj.write(input) - stdinFileObj.close() - stdinFileObj = open(stdinFileName, "r") - - stdoutFileName = getTempFileName() - stdoutFileObj = open(stdoutFileName, "w") - - stderrFileName = getTempFileName() - stderrFileObj = open(stderrFileName, "w") - except IOError, e: - log("Failed to create temporary file for executing command [%s]: %s" % (command, e)) - if output: - return rv - return rv["Status"] - - stdoutContent = None - stderrContent = None - - process = runCommandBG(command, - stdinFileObj=stdinFileObj, - stdoutFileObj=stdoutFileObj, - stderrFileObj=stderrFileObj, - shell=shell, root=root) - if process: - rv['Status'] = process.wait() - rv['Stdout'] = open(stdoutFileName).read() - rv['Stderr'] = open(stderrFileName).read() - - os.remove(stdinFileName) - os.remove(stdoutFileName) - os.remove(stderrFileName) - - log("runCommand(): execution status of command [%s] = [%s]" % (command, rv)) - - if output: - return rv - return rv["Status"] - - -def runCommandFG(command, stdout=False, stderr=False, - shell=False, root=None): - if stdout or stderr: - output = True - else: - output = False - return runCommand(command, output=output, shell=shell, root=root) - - -def IP2Number(ipString): - try: - return socket.htonl(struct.unpack("I", socket.inet_aton(ipString))[0]) - except socket.error: - return None - except TypeError: - return None - except struct.error: - return None - - -def Number2IP(number): - try: - return socket.inet_ntoa(struct.pack("I", socket.ntohl(number))) - except socket.error: - return None - except AttributeError: - return None - except ValueError: - return None - - -def computeHostName(hostName): - if not hostName: - return False - - hostPrefix = "" - for i in range(len(hostName), 0, -1): - pos = i - 1 - if hostName[pos].isdigit(): - continue - break - hostPrefix = hostName[:pos+1] - try: - hostIndex = int(hostName[pos+1:]) - except ValueError: - hostIndex = 0 - # TODO: Check the availablity of the (server) name - return "%s%s" % (hostPrefix, hostIndex + 1) - - -def daemonize(): - try: - pid = os.fork() - if pid > 0: - # exit first parent - sys.exit(0) - except OSError, e: - #sys.stderr.write("fork #1 failed: %d (%s)\n" % (e.errno, e.strerror)) - return False - - # decouple from parent environment - os.chdir("/") - os.setsid() - os.umask(0) - - # do second fork - try: - pid = os.fork() - if pid > 0: - # exit from second parent - sys.exit(0) - except OSError, e: - #sys.stderr.write("fork #2 failed: %d (%s)\n" % (e.errno, e.strerror)) - return False - - # redirect standard file descriptors - sys.stdout.flush() - sys.stderr.flush() - si = file("/dev/null", 'r') - so = file("/dev/null", 'a+') - se = file("/dev/null", 'a+', 0) - os.dup2(si.fileno(), sys.stdin.fileno()) - os.dup2(so.fileno(), sys.stdout.fileno()) - os.dup2(se.fileno(), sys.stderr.fileno()) - return True - - -def getDownloadStatus(fileName): - try: - lines = [line for line in open(fileName) - if "saved" in line or "%" in line] - except IOError: - return 0 - if not lines: - return 0 - if "saved" in lines[-1]: - return 100 - return lines[-1].split("%")[0].split()[-1] - - -def getMeminfo(): - """-> dict of data from meminfo (str:int). - Values are in kilobytes. - """ - import re - re_parser = re.compile(r'^(?P<key>\S*):\s*(?P<value>\d*)\s*kB' ) - result = {} - for line in open('/proc/meminfo'): - match = re_parser.match(line) - if not match: - continue # skip lines that don't parse - key, value = match.groups(['key', 'value']) - result[key] = int(value) - result['MemUsed'] = (result['MemTotal'] - result['MemFree']) - return result - - -def getCpuUsage(): - """-> dict of cpuid : (usertime, nicetime, systemtime, idletime) - cpuid "cpu" means the total for all CPUs. - cpuid "cpuN" means the value for CPU N. - """ - wanted_records = [line for line in open('/proc/stat') if - line.startswith('cpu')] - result = {} - for cpuline in wanted_records: - fields = cpuline.split()[:5] - data = map(int, fields[1:]) - result[fields[0]] = tuple(data) - return result - -def _getCpuStatList(): - try: - fp = open("/proc/stat") - line = fp.readline() - fp.close() - return map(float, line.split()[1:5]) - except IOError, e: - Utils.log("Failed to open /proc/stat: %s" % str(e)) - return None - -def getCpuUsageAvg(): - st1 = _getCpuStatList() - #time1 = time.time() - time.sleep(1) - st2 = _getCpuStatList() - #time2 = time.time() - if not (st1 and st2): - return None - usageTime = (st2[0] - st1[0]) + (st2[1] - st1[1]) + (st2[2] - st1[2]) - try: - return (100.0 * usageTime) / (usageTime + (st2[3] - st1[3])) - except ZeroDivisionError, e: - return 0 - -def getLoadavg(): - try: - loadavgstr = open('/proc/loadavg', 'r').readline().strip() - except IOError: - syslog.syslog(syslog.LOG_ERR, "failed to find cpu load") - return None - - data = map(float, loadavgstr.split()[1:]) - # returns 1 minute load average - return data[0] - - -def getInfinibandPortStatus(): - - """ Check for availability of infiniband port - and return which port is active in a key pair value - """ - - # Check for existence of infiniband ports - value = os.popen ("ls /sys/class/infiniband").readline().strip() - - if not value: - return None - - portlist = os.popen ("echo /sys/class/infiniband/*/ports/*").readline().split() - - portkeys = {} - - for port in portlist: - value = os.popen ("cat %s/state" % - port.strip()).readline().split(':')[1].strip() - portkeys[port.strip()] = value - - return portkeys - - -def getServerFqdn(): - rv = runCommand("hostname --fqdn", output=True, root=True) - if not rv["Stderr"]: - return stripEmptyLines(rv["Stdout"]) - return socket.gethostname() - - -def getServerCount(): - try: - return int(open(Globals.SERVER_COUNT_FILE).read().strip()) - except IOError: - log("failed to read file %s" % Globals.SERVER_COUNT_FILE) - return 1 - except ValueError: - log("invalid number format in file %s" % Globals.SERVER_COUNT_FILE) - return 1 - - -def setServerCount(count): - try: - open(Globals.SERVER_COUNT_FILE, "w").write("%s\n" % count) - return True - except IOError: - log("failed to write file %s" % Globals.SERVER_COUNT_FILE) - return False - - -def getInstalledServerCount(): - try: - return int(open(Globals.INSTALLED_SERVER_COUNT_FILE).read().strip()) - except IOError: - log("failed to read file %s" % Globals.INSTALLED_SERVER_COUNT_FILE) - return 1 - except ValueError: - log("invalid number format in file %s" % Globals.INSTALLED_SERVER_COUNT_FILE) - return 1 - - -def setInstalledServerCount(count): - try: - open(Globals.INSTALLED_SERVER_COUNT_FILE, "w").write("%s\n" % count) - return True - except IOError: - log("failed to write file %s" % Globals.INSTALLED_SERVER_COUNT_FILE) - return False - - -def getLastInstalledServerIpList(): - ipList = {} - networkDom = Protocol.XDOM() - if not networkDom.parseFile(Globals.GLOBAL_NETWORK_FILE): - log("failed to parse file %s" % Globals.GLOBAL_NETWORK_FILE) - for tagE in networkDom.getElementsByTagRoute("server.interface"): - interfaceDom = Protocol.XDOM() - interfaceDom.setDomObj(tagE) - ipAddress = interfaceDom.getTextByTagRoute("ipaddr") - if ipAddress: - ipList[interfaceDom.getTextByTagRoute("device")] = ipAddress - return ipList - - -def getFreeIpAddress(device=None): - serverCount = getServerCount() - installedServerCount = getInstalledServerCount() - if serverCount == installedServerCount: - return None - - availableServerCount = serverCount - installedServerCount - ipList = getLastInstalledServerIpList() - - if not ipList: - return None - - if device: - if device not in ipList.keys(): - return None - deviceIpAddress = ipList[device] - else: - deviceIpAddress = ipList.values()[0] - ipNumber = IP2Number(deviceIpAddress) - - for i in range((ipNumber + availableServerCount), ipNumber, -1): - ipAddress = Number2IP(i) - if runCommandFG(["ping", "-qnc", "1", ipAddress]) != 0: - return ipAddress - return None - - -def getPasswordHash(userName): - try: - #return spwd.getspnam(userName).sp_pwd - return "Not implimented" - except KeyError: - return None - - -def getTransactionKey(): - try: - tokens = open(Globals.TRANSACTION_KEY_FILE).read().split(',') - except IOError: - return None, None - return tokens - - -def generateSignature(): - #return str(uuid.uuid4()) + ('--%f' % time.time()) - return ('--%f' % time.time()) - - -def getSignature(): - try: - return open(Globals.SIGNATURE_FILE).read().strip() - except IOError: - log(syslog.LOG_ERR, "unable to read signaure from %s file" % Globals.SIGNATURE_FILE) - return False - - -def storeSignature(signature, fileName=Globals.SIGNATURE_FILE): - try: - open(fileName, "w").write(signature + "\n") - except IOError: - log(syslog.LOG_ERR, "unable to write signature %s to %s file" % (signature, fileName)) - return False - return True - - -def isUserExist(userName): - try: - grp.getgrnam(userName).gr_gid - return True - except KeyError: - pass - try: - pwd.getpwnam(userName).pw_uid - return True - except KeyError: - pass - return False - - -def getGsnUserInfo(fileName=Globals.GSN_USER_INFO_FILE): - userInfo = {} - userInfo["UserId"] = None - userInfo["Password"] = None - try: - for line in open(fileName): - line = line.strip() - k = line[:line.index("=")] - v = line[line.index("=") + 1:] - if v[0] == "'" or v[0] == '"': - v = v[1:] - if v[-1] == "'" or v[-1] == '"': - v = v[:-1] - if k.upper() == "GSN_ID": - userInfo["UserId"] = v - if k.upper() == "GSN_PASSWORD": - userInfo["Password"] = v - except IOError, e: - log("Failed to read file %s: %s" % (fileName, e)) - return userInfo - - -def setGsnUserInfo(userInfo, fileName=Globals.GSN_USER_INFO_FILE): - try: - fp = open(fileName, "w") - fp.write("GSN_ID=%s\n" % userInfo["UserId"]) - fp.write("GSN_PASSWORD=%s\n" % userInfo["Password"]) - fp.close() - return True - except IOError, e: - log("Failed to write file %s: %s" % (fileName, e)) - return False - - -def getPlatformVersion(fileName=Globals.GLUSTER_VERSION_FILE): - versionInfo = {} - versionInfo["Version"] = None - versionInfo["Update"] = None - try: - lines = open(Globals.GLUSTER_VERSION_FILE).readlines() - for line in open(fileName): - line = line.strip() - k = line[:line.index("=")] - v = line[line.index("=") + 1:] - if v[0] == "'" or v[0] == '"': - v = v[1:] - if v[-1] == "'" or v[-1] == '"': - v = v[:-1] - if k.upper() == "VERSION": - versionInfo["Version"] = v - if k.upper() == "UPDATE": - versionInfo["Update"] = v - except IOError, e: - log("Failed to read file %s: %s" % (fileName, e)) - return versionInfo - - -def setPlatformVersion(versionInfo, fileName=Globals.GLUSTER_VERSION_FILE): - if isString(versionInfo): - tokens = versionInfo.strip().split(".") - if len(tokens) < 2: - log("Invalid version format %s. Expecting <MAJOR>.<MINOR>.<PATCHLEVEL>" % versionInfo) - return False - version = ".".join(tokens[:2]) - update = ".".join(tokens[2:]) - if not update: - update = "0" - else: - version = versionInfo["Version"] - update = versionInfo["Update"] - try: - fp = open(fileName, "w") - fp.write("VERSION=%s\n" % version) - fp.write("UPDATE=%s\n" % update) - fp.close() - return True - except IOError, e: - log("Failed to write file %s: %s" % (fileName, e)) - return False - - -def getGlusterUpdateDom(serverVersion): - errorMessage = "" - updateInfoDom = None - try: - baseUrl = open(Globals.GLUSTER_UPDATE_SITE_FILE).read().strip() - except IOError, e: - log("Failed to read file %s: %s" % (Globals.GLUSTER_UPDATE_SITE_FILE, e)) - errorMessage = "Failed to read update site file" - return updateInfoDom, errorMessage - - try: - url = "%s/%s/%s" % (baseUrl, serverVersion, Globals.GLUSTER_UPDATES_FILE) - connection = urllib.urlopen(url) - if connection.getcode() != 200: - connection.close() - errorMessage = "Error received from server to open URL %s" % url - return updateInfoDom, errorMessage - updateInfoString = connection.read() - connection.close() - except IOError, e: - log("Failed to get update information from URL %s: %s" % (url, e)) - errorMessage = "Error getting update information" - return updateInfoDom, errorMessage - - updateInfoDom = Protocol.XDOM() - if not updateInfoDom.parseString(updateInfoString): - log("XML parse error on update information content [%s]" % updateInfoString) - errorMessage = "Parse error on update information" - updateInfoDom = None - return updateInfoDom, errorMessage - - -def removeFile(fileName, root=False): - if root: - if runCommand("rm %s" % fileName, root=True) == 0: - return True - return False - try: - os.remove(fileName) - return True - except OSError, e: - log("Failed to remove file %s: %s" % (fileName, e)) - return False - - -def isLiveMode(): - return os.path.exists(Globals.LIVE_MODE_FILE) - -def convertKbToMb(kb): - return kb / 1024.0 - - -def getIPIndex(indexFile): - try: - fp = open(indexFile) - line = fp.readline() - fp.close() - index = int(line) - except IOError: - index = 0 - except ValueError: - index = False - return index - -def setIPIndex(index, indexFile): - try: - fp = open(indexFile, "w") - fp.write(str(index)) - fp.close() - except IOError: - return False - return True - -def IP2Number(ipString): - try: - return socket.htonl(struct.unpack("I", socket.inet_aton(ipString))[0]) - except socket.error: - return None - except TypeError: - return None - except struct.error: - return None - -def Number2IP(number): - try: - return socket.inet_ntoa(struct.pack("I", socket.ntohl(number))) - except socket.error: - return None - except AttributeError: - return None - except ValueError: - return None - -def hasEntryFoundInFile(searchString, dnsEntryFileName): - try: - addServerEntryList = open(dnsEntryFileName).read().split() - except IOError: - return None - if searchString in addServerEntryList: - return True - return False - - -def computeIpAddress(ipAddress, startIp, endIp): - startIpNumber = IP2Number(startIp) - endIpNumber = IP2Number(endIp) - if not ipAddress: - return startIp - nextIpNumber = IP2Number(ipAddress) - while True: - nextIpNumber = nextIpNumber + 1 - ipAddress = Number2IP(nextIpNumber) - rv = runCommandFG(["ping", "-qnc", "1", ipAddress]) - if type(rv) == type(True): - return False - if rv != 0: - break - - if nextIpNumber >= startIpNumber and nextIpNumber <= endIpNumber: - return ipAddress - - nextIpNumber = IP2Number(startIp) - while True: - ipAddress = Number2IP(nextIpNumber) - nextIpNumber = nextIpNumber + 1 - rv = runCommandFG(["ping", "-qnc", "1", ipAddress]) - if type(rv) == type(True): - return False - if rv != 0: - break - - if IP2Number(ipAddress) >= startIpNumber and IP2Number(ipAddress) <= endIpNumber: - return ipAddress - return False - - -def setHostNameAndIp(hostName, ipAddress, lastAddServerDetailFile): - try: - fp = open(lastAddServerDetailFile, "w") - fp.write("HOSTNAME=" + hostName + "\n") - fp.write("IPADDRESS=" + ipAddress); - fp.close() - except IOError: - return False - return True - -def getPort(): - try: - fd = open(Globals.PORT_FILE, "r") - portString = fd.readline() - fd.close() - port = int(portString) - except IOError: - port = Globals.DEFAULT_PORT - 2 - except ValueError: - port = Globals.DEFAULT_PORT - 2 - return port - -def setPort(port): - try: - fd = open(Globals.PORT_FILE, "w") - fd.write(str(port)) - fd.close() - except IOError: - return False - return True - -def getServerAgentCredentials(): - try: - lines = open(Globals.SERVERAGENT_AUTH_FILE).readlines() - except IOError: - return None,None - - userName = None - password = None - - for l in lines: - if l[-1] == '\n': - l = l[:-1] - k = l[:l.index('=')] - v = l[l.index('=') + 1:] - if v[0] == "'" or v[0] == '"': - v = v[1:] - if v[-1] == "'" or v[-1] == '"': - v = v[:-1] - if k.upper() == "AGENT_ID": - userName = v - if k.upper() == "AGENT_PASSWORD": - password = v - - return userName, password - -def getGatewayAgentCredentials(): - try: - lines = open(Globals.GATEWAYAGENT_AUTH_FILE).readlines() - except IOError: - return None - - #userName = None - password = None - - for l in lines: - if l[-1] == '\n': - l = l[:-1] - k = l[:l.index('=')] - v = l[l.index('=') + 1:] - if v[0] == "'" or v[0] == '"': - v = v[1:] - if v[-1] == "'" or v[-1] == '"': - v = v[:-1] - #if k.upper() == "AGENT_ID": - # userName = v - if k.upper() == "AGENT_PASSWORD": - password = v - - return password - -def getWebAgentCredentials(): - try: - lines = open(Globals.WEBAGENT_AUTH_FILE).readlines() - except IOError: - return None,None - - userName = None - password = None - - for l in lines: - if l[-1] == '\n': - l = l[:-1] - k = l[:l.index('=')] - v = l[l.index('=') + 1:] - if v[0] == "'" or v[0] == '"': - v = v[1:] - if v[-1] == "'" or v[-1] == '"': - v = v[:-1] - if k.upper() == "AGENT_ID": - userName = v - if k.upper() == "AGENT_PASSWORD": - password = v - - return userName, password - -def daemonize(): - try: - pid = os.fork() - if pid > 0: - # exit first parent - sys.exit(0) - except OSError, e: - #sys.stderr.write("fork #1 failed: %d (%s)\n" % (e.errno, e.strerror)) - return False - - # decouple from parent environment - os.chdir("/") - os.setsid() - os.umask(0) - - # do second fork - try: - pid = os.fork() - if pid > 0: - # exit from second parent - sys.exit(0) - except OSError, e: - #sys.stderr.write("fork #2 failed: %d (%s)\n" % (e.errno, e.strerror)) - return False - - # redirect standard file descriptors - sys.stdout.flush() - sys.stderr.flush() - si = file("/dev/null", 'r') - so = file("/dev/null", 'a+') - se = file("/dev/null", 'a+', 0) - os.dup2(si.fileno(), sys.stdin.fileno()) - os.dup2(so.fileno(), sys.stdout.fileno()) - os.dup2(se.fileno(), sys.stderr.fileno()) - return True - -def getFreeIpAddress(): - startRange, endRange = getStoragePoolInfo() - if not (startRange and endRange): - return None - - startIpNumber = IP2Number(startRange) - endIpNumber = IP2Number(endRange) - - for ipNumber in range(endIpNumber, startIpNumber, -1): - rv = runCommandFG(["ping", "-qnc", "1", Number2IP(ipNumber)]) - if type(rv) == type(True): - return None - if rv != 0: - return Number2IP(ipNumber) - return None - -def getDhcpServerStatus(): - status = runCommandFG(["sudo", "service", "dnsmasq", " status"]) - if type(status) == type(True) or 0 != status: - return False - return True - -def startDhcpServer(): - status = runCommandFG(["sudo", "service", "dnsmasq", " start"]) - if type(status) == type(True) or 0 != status: - return False - return True - -def stopDhcpServer(): - status = runCommandFG(["sudo", "service", "dnsmasq", " stop"]) - if type(status) == type(True) or 0 != status: - return False - return True - -def getStoragePoolInfo(): - startRange = None - endRange = None - try: - for line in open(Globals.GLUSTER_SERVER_POOL_FILE): - tokens = line.split("=") - if tokens[0] == "STARTRANGE": - startRange = tokens[1].strip() - if tokens[0] == "ENDRANGE": - endRange = tokens[1].strip() - except IOError: - log(syslog.LOG_ERR, "unable to read %s file" % Globals.GLUSTER_SERVER_POOL_FILE) - return startRange, endRange - -def configureDnsmasq(serverIpAddress, dhcpIpAddress): - dnsmasqConfFile = Globals.GLUSTER_CONF_CONF_DIR + "/dnsmasq.conf" - serverPortString = "68" - try: - for arg in open("/proc/cmdline").read().strip().split(): - token = arg.split("=") - if token[0] == "dhcp": - serverPortString = token[1] - break - except IOError: - log(syslog.LOG_ERR, "Failed to read /proc/cmdline. Continuing with default port 68") - try: - serverPort = int(serverPortString) - except ValueError: - log(syslog.LOG_ERR, "Invalid dhcp port '%s' in /proc/cmdline. Continuing with default port 68" % serverPortString) - serverPort = 68 - - try: - fp = open(dnsmasqConfFile, "w") - fp.write("no-hosts\n") - #fp.write("addn-hosts=%s\n" % Globals.GLUSTER_DNS_ENTRIES) - fp.write("bind-interfaces\n") - fp.write("except-interface=lo\n") - fp.write("dhcp-range=%s,%s\n" % (dhcpIpAddress, dhcpIpAddress)) - fp.write("dhcp-lease-max=1\n") - #fp.write("dhcp-option=option:router,%s\n" % serverIp) - #fp.write("dhcp-option=option:ntp-server,%s\n" % serverIp) - fp.write("dhcp-alternate-port=%s\n" % serverPort) - fp.write("server=%s\n" % serverIpAddress) - fp.write("dhcp-script=/usr/sbin/server-info\n") - fp.close() - except IOError: - log(syslog.LOG_ERR, "unable to write dnsmasq configuration %s" % dnsmasqConfFile) - return False - status = runCommandFG(["sudo", "cp", "-f", Globals.GLUSTER_CONF_CONF_DIR + "/dnsmasq.conf", Globals.DNSMASQ_CONF_FILE]) - if type(status) == type(True) or 0 != status: - log(syslog.LOG_ERR, "unable to copy dnsmasq configuration to " + Globals.DNSMASQ_CONF_FILE) - return False - return True - -def configureDhcpServer(serverIpAddress, dhcpIpAddress): - return configureDnsmasq(serverIpAddress, dhcpIpAddress) - -def log(priority, message=None): - if type(priority) == type(""): - logPriority = syslog.LOG_INFO - logMessage = priority - else: - logPriority = priority - logMessage = message - if not logMessage: - return - #if Globals.DEBUG: - # sys.stderr.write(logMessage) - else: - syslog.syslog(logPriority, logMessage) - return - - -def stripEmptyLines(content): - ret = "" - for line in content.split("\n"): - if line.strip() != "": - ret += line - return ret - - -def getDeviceFormatStatusFile(device): - return "/var/tmp/format_%s.status" % device.replace('/', '_') - -def getDeviceFormatLockFile(device): - return "/var/lock/format_%s.lock" % device.replace('/', '_') - -def getDeviceFormatOutputFile(device): - return "/var/tmp/format_%s.out" % device.replace('/', '_') - -def getGlusterVersion(): - rv = runCommand("/usr/sbin/gluster --version", output=True) - if rv["Stderr"]: - return None - if rv["Status"] != 0: - return None - if not rv["Stdout"]: - return None - return rv["Stdout"].strip().split()[1] diff --git a/src/com.gluster.storage.management.gateway.scripts/src/Commands.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/Commands.py index c728b565..c728b565 100644 --- a/src/com.gluster.storage.management.gateway.scripts/src/Commands.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/Commands.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/Disk.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/Disk.py index 2c47d396..2c47d396 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/Disk.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/Disk.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/DiskUtils.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/DiskUtils.py index 341c9083..341c9083 100644 --- a/src/com.gluster.storage.management.gateway.scripts/src/DiskUtils.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/DiskUtils.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/FsTabUtils.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/FsTabUtils.py index fcac4196..fcac4196 100644 --- a/src/com.gluster.storage.management.gateway.scripts/src/FsTabUtils.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/FsTabUtils.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/GetServerNetworkConfig.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/GetServerNetworkConfig.py index 54f68caf..54f68caf 100644 --- a/src/com.gluster.storage.management.gateway.scripts/src/GetServerNetworkConfig.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/GetServerNetworkConfig.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/GlusterdUtils.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/GlusterdUtils.py index 7c0e899c..7c0e899c 100644 --- a/src/com.gluster.storage.management.gateway.scripts/src/GlusterdUtils.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/GlusterdUtils.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/NetworkUtils.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/NetworkUtils.py index 9f5687e4..9f5687e4 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/NetworkUtils.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/NetworkUtils.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/RRDUtils.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/RRDUtils.py index 1ad0deee..1ad0deee 100644 --- a/src/com.gluster.storage.management.gateway.scripts/src/RRDUtils.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/RRDUtils.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/ServerUtils.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/ServerUtils.py index 1fec994c..1fec994c 100644 --- a/src/com.gluster.storage.management.gateway.scripts/src/ServerUtils.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/ServerUtils.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/VolumeUtils.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/VolumeUtils.py index b1031ccc..b1031ccc 100644 --- a/src/com.gluster.storage.management.gateway.scripts/src/VolumeUtils.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/VolumeUtils.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/add_user_cifs.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/add_user_cifs.py index b2bf045a..b2bf045a 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/add_user_cifs.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/add_user_cifs.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/clear_volume_directory.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/clear_volume_directory.py index 029787e5..029787e5 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/clear_volume_directory.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/clear_volume_directory.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/create_volume_cifs.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/create_volume_cifs.py index 9da715e6..5a27ab87 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/create_volume_cifs.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/create_volume_cifs.py @@ -25,16 +25,22 @@ def main(): volumeMountDirName = "%s/%s" % (Globals.REEXPORT_DIR, volumeName) try: - os.mkdir(volumeMountDirName) + if not os.path.exists(volumeMountDirName): + os.mkdir(volumeMountDirName) except OSError, e: Utils.log("failed creating %s: %s\n" % (volumeMountDirName, str(e))) sys.stderr.write("Failed creating %s: %s\n" % (volumeMountDirName, str(e))) sys.exit(1) - if VolumeUtils.writeVolumeCifsConfiguration(volumeName, userList): - sys.exit(0) - sys.stderr.write("Unable to write volume cifs configuration\n") - sys.exit(2) + if not VolumeUtils.writeVolumeCifsConfiguration(volumeName, userList): + sys.stderr.write("Failed to write volume cifs configuration\n") + sys.exit(2) + + if Utils.runCommand("service smb reload") != 0: + Utils.log("Failed to reload smb service") + sys.stderr.write("Failed to reload smb service\n") + sys.exit(3) + sys.exit(0) if __name__ == "__main__": diff --git a/src/com.gluster.storage.management.gateway.scripts/src/create_volume_directory.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/create_volume_directory.py index e295f249..e295f249 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/create_volume_directory.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/create_volume_directory.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/delete_user_cifs.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/delete_user_cifs.py index aeda989f..aeda989f 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/delete_user_cifs.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/delete_user_cifs.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/delete_volume_cifs.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/delete_volume_cifs.py index 572d819c..572d819c 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/delete_volume_cifs.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/delete_volume_cifs.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/disable-ssh-password-auth.sh b/src/com.gluster.storage.management.gateway.scripts/src/backend/disable-ssh-password-auth.sh index 07ee1a3a..07ee1a3a 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/disable-ssh-password-auth.sh +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/disable-ssh-password-auth.sh diff --git a/src/com.gluster.storage.management.gateway.scripts/src/format_device.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/format_device.py index e41baa0e..e41baa0e 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/format_device.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/format_device.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/get_brick_status.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_brick_status.py index afc15f3a..afc15f3a 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/get_brick_status.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_brick_status.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/get_disk_mount_point.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_disk_mount_point.py index 2f4a39c3..2f4a39c3 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/get_disk_mount_point.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_disk_mount_point.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/get_disk_name_by_path.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_disk_name_by_path.py index 08e80b7e..08e80b7e 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/get_disk_name_by_path.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_disk_name_by_path.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/get_file.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_file.py index 61c33eba..61c33eba 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/get_file.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_file.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/get_format_device_status.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_format_device_status.py index 39bfe01c..39bfe01c 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/get_format_device_status.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_format_device_status.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/get_rrd_cpu_details.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_rrd_cpu_details.py index e60d7199..e60d7199 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/get_rrd_cpu_details.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_rrd_cpu_details.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/get_rrd_memory_details.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_rrd_memory_details.py index a6dd4987..a6dd4987 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/get_rrd_memory_details.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_rrd_memory_details.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/get_rrd_net_details.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_rrd_net_details.py index c319c888..c319c888 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/get_rrd_net_details.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_rrd_net_details.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/get_server_details.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_server_details.py index 30ffac58..30ffac58 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/get_server_details.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_server_details.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/get_server_status.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_server_status.py index 2814f10f..2814f10f 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/get_server_status.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_server_status.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/get_volume_brick_log.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_volume_brick_log.py index ff4a4b9a..ff4a4b9a 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/get_volume_brick_log.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_volume_brick_log.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/get_volume_log.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_volume_log.py index f388aa4e..f388aa4e 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/get_volume_log.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/get_volume_log.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/gluster_provision_block_wrapper.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/gluster_provision_block_wrapper.py index 849bce3f..849bce3f 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/gluster_provision_block_wrapper.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/gluster_provision_block_wrapper.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/modify_volume_cifs.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/modify_volume_cifs.py index d56b1f59..d56b1f59 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/modify_volume_cifs.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/modify_volume_cifs.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/multicast-discoverd.init.d b/src/com.gluster.storage.management.gateway.scripts/src/backend/multicast-discoverd.init.d index 7cfbe44a..7cfbe44a 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/multicast-discoverd.init.d +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/multicast-discoverd.init.d diff --git a/src/com.gluster.storage.management.gateway.scripts/src/multicast-discoverd.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/multicast-discoverd.py index fbadd048..fbadd048 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/multicast-discoverd.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/multicast-discoverd.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/rrd_cpu.pl b/src/com.gluster.storage.management.gateway.scripts/src/backend/rrd_cpu.pl index 7b070812..7b070812 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/rrd_cpu.pl +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/rrd_cpu.pl diff --git a/src/com.gluster.storage.management.gateway.scripts/src/rrd_mem.pl b/src/com.gluster.storage.management.gateway.scripts/src/backend/rrd_mem.pl index 5c47cd81..5c47cd81 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/rrd_mem.pl +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/rrd_mem.pl diff --git a/src/com.gluster.storage.management.gateway.scripts/src/rrd_net.pl b/src/com.gluster.storage.management.gateway.scripts/src/backend/rrd_net.pl index c88afced..c88afced 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/rrd_net.pl +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/rrd_net.pl diff --git a/src/com.gluster.storage.management.gateway.scripts/src/rrd_update_cpu_details.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/rrd_update_cpu_details.py index 6ec6a1e3..6ec6a1e3 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/rrd_update_cpu_details.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/rrd_update_cpu_details.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/rrd_update_memory_details.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/rrd_update_memory_details.py index 0a30d248..0a30d248 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/rrd_update_memory_details.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/rrd_update_memory_details.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/setup_cifs_config.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/setup_cifs_config.py index 67ce962e..67ce962e 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/setup_cifs_config.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/setup_cifs_config.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/start_volume_cifs.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/start_volume_cifs.py index 0d09b5eb..0d09b5eb 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/start_volume_cifs.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/start_volume_cifs.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/stop_volume_cifs.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/stop_volume_cifs.py index d67d9061..d67d9061 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/stop_volume_cifs.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/stop_volume_cifs.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/update_volume_cifs.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/update_volume_cifs.py index 64297a87..64297a87 100755 --- a/src/com.gluster.storage.management.gateway.scripts/src/update_volume_cifs.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/update_volume_cifs.py diff --git a/src/com.gluster.storage.management.gateway/WebContent/scripts/Globals.py b/src/com.gluster.storage.management.gateway.scripts/src/common/Globals.py index 89d3d098..cfab83b6 100644 --- a/src/com.gluster.storage.management.gateway/WebContent/scripts/Globals.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/common/Globals.py @@ -129,3 +129,7 @@ VERSION_DICTONARY = {} AWS_WEB_SERVICE_URL = "http://169.254.169.254/latest" REAL_SAMBA_CONF_FILE = "/etc/samba/real.smb.conf" + +DEFAULT_UID = 1024000 +CIFS_USER_FILE = "/opt/glustermg/etc/users.cifs" +CIFS_VOLUME_FILE = "/opt/glustermg/etc/volumes.cifs" diff --git a/src/com.gluster.storage.management.gateway.scripts/src/common/Globals.pyc b/src/com.gluster.storage.management.gateway.scripts/src/common/Globals.pyc Binary files differnew file mode 100644 index 00000000..49f58157 --- /dev/null +++ b/src/com.gluster.storage.management.gateway.scripts/src/common/Globals.pyc diff --git a/src/com.gluster.storage.management.gateway.scripts/src/Protocol.py b/src/com.gluster.storage.management.gateway.scripts/src/common/Protocol.py index ff073593..ff073593 100644 --- a/src/com.gluster.storage.management.gateway.scripts/src/Protocol.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/common/Protocol.py diff --git a/src/com.gluster.storage.management.gateway.scripts/src/common/Protocol.pyc b/src/com.gluster.storage.management.gateway.scripts/src/common/Protocol.pyc Binary files differnew file mode 100644 index 00000000..3b0da181 --- /dev/null +++ b/src/com.gluster.storage.management.gateway.scripts/src/common/Protocol.pyc diff --git a/src/com.gluster.storage.management.gateway/WebContent/scripts/Utils.py b/src/com.gluster.storage.management.gateway.scripts/src/common/Utils.py index 82f8b7b6..588d52fa 100644 --- a/src/com.gluster.storage.management.gateway/WebContent/scripts/Utils.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/common/Utils.py @@ -374,7 +374,7 @@ def getMeminfo(): continue # skip lines that don't parse key, value = match.groups(['key', 'value']) result[key] = int(value) - result['MemUsed'] = (result['MemTotal'] - result['MemFree']) + result['MemUsed'] = (result['MemTotal'] - result['MemFree'] - result['Buffers'] - result['Cached']) return result @@ -1084,3 +1084,18 @@ def getGlusterVersion(): if not rv["Stdout"]: return None return rv["Stdout"].strip().split()[1] + +def getCifsUserUid(userName): + try: + fp = open(Globals.CIFS_USER_FILE) + content = fp.read() + fp.close() + except IOError, e: + Utils.log("failed to read file %s: %s" % (Globals.CIFS_USER_FILE, str(e))) + return False + + for line in content.strip().split(): + tokens = line.split(":") + if tokens[1] == userName: + return int(tokens[0]) + return None diff --git a/src/com.gluster.storage.management.gateway.scripts/src/common/Utils.pyc b/src/com.gluster.storage.management.gateway.scripts/src/common/Utils.pyc Binary files differnew file mode 100644 index 00000000..501aa2ee --- /dev/null +++ b/src/com.gluster.storage.management.gateway.scripts/src/common/Utils.pyc diff --git a/src/com.gluster.storage.management.gateway.scripts/src/XmlHandler.py b/src/com.gluster.storage.management.gateway.scripts/src/common/XmlHandler.py index b9db15c8..b9db15c8 100644 --- a/src/com.gluster.storage.management.gateway.scripts/src/XmlHandler.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/common/XmlHandler.py diff --git a/src/com.gluster.storage.management.gateway/WebContent/scripts/add_user_cifs_all.py b/src/com.gluster.storage.management.gateway.scripts/src/gateway/add_user_cifs_all.py index d0ad89fc..a54685fa 100755 --- a/src/com.gluster.storage.management.gateway/WebContent/scripts/add_user_cifs_all.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/gateway/add_user_cifs_all.py @@ -11,20 +11,17 @@ if not p1 in sys.path: sys.path.append(p1) if not p2 in sys.path: sys.path.append(p2) +import Globals import Utils -defaultUid = 1024000 -cifsUserFile = "/opt/glustermg/etc/users.cifs" - - def getUid(userName): try: - fp = open(cifsUserFile) + fp = open(Globals.CIFS_USER_FILE) content = fp.read() fp.close() except IOError, e: - Utils.log("failed to read file %s: %s" % (cifsUserFile, str(e))) + Utils.log("failed to read file %s: %s" % (Globals.CIFS_USER_FILE, str(e))) return False for line in content.strip().split(): @@ -35,30 +32,30 @@ def getUid(userName): def getLastUid(): - if not os.path.exists(cifsUserFile): - return defaultUid + if not os.path.exists(Globals.CIFS_USER_FILE): + return Globals.DEFAULT_UID try: - fp = open(cifsUserFile) + fp = open(Globals.CIFS_USER_FILE) content = fp.read() fp.close() except IOError, e: - Utils.log("failed to read file %s: %s" % (cifsUserFile, str(e))) + Utils.log("failed to read file %s: %s" % (Globals.CIFS_USER_FILE, str(e))) return False lines = content.strip().split() if not lines: - return defaultUid + return Globals.DEFAULT_UID return int(lines[-1].split(":")[0]) def setUid(uid, userName): try: - fp = open(cifsUserFile, "a") + fp = open(Globals.CIFS_USER_FILE, "a") fp.write("%s:%s\n" % (uid, userName)) fp.close() return True except IOError, e: - Utils.log("failed to write file %s: %s" % (cifsUserFile, str(e))) + Utils.log("failed to write file %s: %s" % (Globals.CIFS_USER_FILE, str(e))) return False diff --git a/src/com.gluster.storage.management.gateway/WebContent/scripts/create_volume_cifs_all.py b/src/com.gluster.storage.management.gateway.scripts/src/gateway/create_volume_cifs_all.py index 70b84e6b..59e74bed 100755 --- a/src/com.gluster.storage.management.gateway/WebContent/scripts/create_volume_cifs_all.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/gateway/create_volume_cifs_all.py @@ -11,30 +11,28 @@ if not p1 in sys.path: sys.path.append(p1) if not p2 in sys.path: sys.path.append(p2) +import Globals import Utils -cifsVolumeFile = "/opt/glustermg/etc/volumes.cifs" - - def addVolumeCifsConf(volumeName, userList): try: - fp = open(cifsVolumeFile) + fp = open(Globals.CIFS_VOLUME_FILE) content = fp.read() fp.close() except IOError, e: - Utils.log("failed to read file %s: %s" % (cifsVolumeFile, str(e))) + Utils.log("failed to read file %s: %s" % (Globals.CIFS_VOLUME_FILE, str(e))) content = "" try: - fp = open(cifsVolumeFile, "w") + fp = open(Globals.CIFS_VOLUME_FILE, "w") for line in content.split(): if line.split(":")[0] != volumeName: fp.write("%s\n" % line) fp.write("%s:%s\n" % (volumeName, ":".join(userList))) fp.close() except IOError, e: - Utils.log("failed to write file %s: %s" % (cifsVolumeFile, str(e))) + Utils.log("failed to write file %s: %s" % (Globals.CIFS_VOLUME_FILE, str(e))) return False return True @@ -48,6 +46,15 @@ def main(): volumeName = sys.argv[2] userList = sys.argv[3:] + missingUserList = [] + for userName in userList: + if not Utils.getCifsUserUid(userName): + missingUserList.append(userName) + + if missingUserList: + sys.stderr.write("User %s does not exists\n" % missingUserList) + sys.exit(1) + rv = Utils.runCommand(["grun.py", serverFile, "create_volume_cifs.py", volumeName] + userList) if rv == 0: if not addVolumeCifsConf(volumeName, userList): diff --git a/src/com.gluster.storage.management.gateway/WebContent/scripts/delete_user_cifs_all.py b/src/com.gluster.storage.management.gateway.scripts/src/gateway/delete_user_cifs_all.py index a07eeae4..3c68891c 100755 --- a/src/com.gluster.storage.management.gateway/WebContent/scripts/delete_user_cifs_all.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/gateway/delete_user_cifs_all.py @@ -11,23 +11,21 @@ if not p1 in sys.path: sys.path.append(p1) if not p2 in sys.path: sys.path.append(p2) +import Globals import Utils -cifsUserFile = "/opt/glustermg/etc/users.cifs" - - def removeUser(userName): try: - fp = open(cifsUserFile) + fp = open(Globals.CIFS_USER_FILE) content = fp.read() fp.close() except IOError, e: - Utils.log("failed to read file %s: %s" % (cifsUserFile, str(e))) + Utils.log("failed to read file %s: %s" % (Globals.CIFS_USER_FILE, str(e))) return False try: - fp = open(cifsUserFile, "w") + fp = open(Globals.CIFS_USER_FILE, "w") lines = content.strip().split() for line in lines: if line.split(":")[1] == userName: @@ -35,7 +33,7 @@ def removeUser(userName): fp.write("%s\n" % line) fp.close() except IOError, e: - Utils.log("failed to write file %s: %s" % (cifsUserFile, str(e))) + Utils.log("failed to write file %s: %s" % (Globals.CIFS_USER_FILE, str(e))) return False return True @@ -51,7 +49,7 @@ def main(): rv = Utils.runCommand("grun.py %s delete_user_cifs.py %s" % (serverList, userName)) if rv == 0: if not removeUser(userName): - Utils.log(("Failed to remove the user:%s on gateway server\n" % userName) + Utils.log("Failed to remove the user:%s on gateway server\n" % userName) sys.exit(0) sys.exit(rv) diff --git a/src/com.gluster.storage.management.gateway/WebContent/scripts/delete_volume_cifs_all.py b/src/com.gluster.storage.management.gateway.scripts/src/gateway/delete_volume_cifs_all.py index d51e647d..3456b92d 100755 --- a/src/com.gluster.storage.management.gateway/WebContent/scripts/delete_volume_cifs_all.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/gateway/delete_volume_cifs_all.py @@ -11,29 +11,27 @@ if not p1 in sys.path: sys.path.append(p1) if not p2 in sys.path: sys.path.append(p2) +import Globals import Utils -cifsVolumeFile = "/opt/glustermg/etc/volumes.cifs" - - def removeVolumeCifsConf(volumeName): try: - fp = open(cifsVolumeFile) + fp = open(Globals.CIFS_VOLUME_FILE) content = fp.read() fp.close() except IOError, e: - Utils.log("failed to read file %s: %s" % (cifsVolumeFile, str(e))) + Utils.log("failed to read file %s: %s" % (Globals.CIFS_VOLUME_FILE, str(e))) content = "" try: - fp = open(cifsVolumeFile, "w") + fp = open(Globals.CIFS_VOLUME_FILE, "w") for line in content.split(): if line.split(":")[0] != volumeName: fp.write("%s\n" % line) fp.close() except IOError, e: - Utils.log("failed to write file %s: %s" % (cifsVolumeFile, str(e))) + Utils.log("failed to write file %s: %s" % (Globals.CIFS_VOLUME_FILE, str(e))) return False return True diff --git a/src/com.gluster.storage.management.gateway/WebContent/scripts/get_volume_user_cifs.py b/src/com.gluster.storage.management.gateway.scripts/src/gateway/get_volume_user_cifs.py index 33de3bf1..c385633e 100755 --- a/src/com.gluster.storage.management.gateway/WebContent/scripts/get_volume_user_cifs.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/gateway/get_volume_user_cifs.py @@ -11,12 +11,10 @@ if not p1 in sys.path: sys.path.append(p1) if not p2 in sys.path: sys.path.append(p2) +import Globals import Utils -cifsVolumeFile = "/opt/glustermg/etc/volumes.cifs" - - def main(): if len(sys.argv) < 2: sys.stderr.write("usage: %s VOLUME_NAME\n" % os.path.basename(sys.argv[0])) @@ -24,11 +22,11 @@ def main(): volumeName = sys.argv[1] - if not os.path.exists(cifsVolumeFile): + if not os.path.exists(Globals.CIFS_VOLUME_FILE): sys.exit(0) try: - fp = open(cifsVolumeFile) + fp = open(Globals.CIFS_VOLUME_FILE) content = fp.read() fp.close() for line in content.split(): @@ -39,8 +37,8 @@ def main(): # given volume is not configured for cifs export sys.exit(0) except IOError, e: - Utils.log("failed to read file %s: %s" % (cifsVolumeFile, str(e))) - sys.stderr.write("Failed to read cifs-volume-file %s: %s\n" % (cifsVolumeFile, str(e))) + Utils.log("failed to read file %s: %s" % (Globals.CIFS_VOLUME_FILE, str(e))) + sys.stderr.write("Failed to read cifs-volume-file %s: %s\n" % (Globals.CIFS_VOLUME_FILE, str(e))) sys.exit(2) diff --git a/src/com.gluster.storage.management.gateway/WebContent/scripts/gmg-reset-password.sh b/src/com.gluster.storage.management.gateway.scripts/src/gateway/gmg-reset-password.sh index 4edf0ffd..4edf0ffd 100755 --- a/src/com.gluster.storage.management.gateway/WebContent/scripts/gmg-reset-password.sh +++ b/src/com.gluster.storage.management.gateway.scripts/src/gateway/gmg-reset-password.sh diff --git a/src/com.gluster.storage.management.gateway/WebContent/scripts/grun.py b/src/com.gluster.storage.management.gateway.scripts/src/gateway/grun.py index f2e2d944..f2e2d944 100755 --- a/src/com.gluster.storage.management.gateway/WebContent/scripts/grun.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/gateway/grun.py diff --git a/src/com.gluster.storage.management.gateway/WebContent/scripts/multicast-discover-servers.py b/src/com.gluster.storage.management.gateway.scripts/src/gateway/multicast-discover-servers.py index fcbcd738..fcbcd738 100755 --- a/src/com.gluster.storage.management.gateway/WebContent/scripts/multicast-discover-servers.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/gateway/multicast-discover-servers.py diff --git a/src/com.gluster.storage.management.gateway/WebContent/scripts/setup_cifs_config_all.py b/src/com.gluster.storage.management.gateway.scripts/src/gateway/setup_cifs_config_all.py index 8dd59c8c..8dd59c8c 100755 --- a/src/com.gluster.storage.management.gateway/WebContent/scripts/setup_cifs_config_all.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/gateway/setup_cifs_config_all.py diff --git a/src/com.gluster.storage.management.gateway/WebContent/scripts/update_volume_cifs_all.py b/src/com.gluster.storage.management.gateway.scripts/src/gateway/update_volume_cifs_all.py index 6a0be968..c5c9d1ef 100755 --- a/src/com.gluster.storage.management.gateway/WebContent/scripts/update_volume_cifs_all.py +++ b/src/com.gluster.storage.management.gateway.scripts/src/gateway/update_volume_cifs_all.py @@ -11,23 +11,21 @@ if not p1 in sys.path: sys.path.append(p1) if not p2 in sys.path: sys.path.append(p2) +import Globals import Utils -cifsVolumeFile = "/opt/glustermg/etc/volumes.cifs" - - def updateVolumeCifsConf(volumeName, userList): try: - fp = open(cifsVolumeFile) + fp = open(Globals.CIFS_VOLUME_FILE) content = fp.read() fp.close() except IOError, e: - Utils.log("failed to read file %s: %s" % (cifsVolumeFile, str(e))) + Utils.log("failed to read file %s: %s" % (Globals.CIFS_VOLUME_FILE, str(e))) return False try: - fp = open(cifsVolumeFile, "w") + fp = open(Globals.CIFS_VOLUME_FILE, "w") for line in content.split(): if line.split(":")[0] == volumeName: fp.write("%s:%s\n" % (volumeName, ":".join(userList))) @@ -35,7 +33,7 @@ def updateVolumeCifsConf(volumeName, userList): fp.write("%s\n" % line) fp.close() except IOError, e: - Utils.log("failed to write file %s: %s" % (cifsVolumeFile, str(e))) + Utils.log("failed to write file %s: %s" % (Globals.CIFS_VOLUME_FILE, str(e))) return False return True @@ -49,6 +47,16 @@ def main(): volumeName = sys.argv[2] userList = sys.argv[3:] + missingUserList = [] + for userName in userList: + if not Utils.getCifsUserUid(userName): + missingUserList.append(userName) + + if missingUserList: + sys.stderr.write("User %s does not exists\n" % missingUserList) + sys.exit(1) + + rv = Utils.runCommand(["grun.py", serverFile, "update_volume_cifs.py", volumeName] + userList) if rv == 0: if not updateVolumeCifsConf(volumeName, userList): diff --git a/src/com.gluster.storage.management.gateway/WebContent/scripts/Protocol.py b/src/com.gluster.storage.management.gateway/WebContent/scripts/Protocol.py deleted file mode 100644 index ff073593..00000000 --- a/src/com.gluster.storage.management.gateway/WebContent/scripts/Protocol.py +++ /dev/null @@ -1,438 +0,0 @@ -# Copyright (C) 2009 Gluster, Inc. <http://www.gluster.com> -# This file is part of Gluster Storage Platform. -# -# Gluster Storage Platform is free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 3 of -# the License, or (at your option) any later version. -# -# Gluster Storage Platform is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see -# <http://www.gnu.org/licenses/>. - -import xml -import xml.parsers.expat -import xml.dom.minidom as MDOM -import os -import Globals -import copy -import Utils - -XML_STRING = 0 -XML_FILE = 1 - -class XDOM: - _domObj = None - - def __init__(self): - self._domObj = MDOM.Document() - return - - @classmethod - def getText(self, nodeList): - rc = "" - for node in nodeList: - if node.nodeType == node.TEXT_NODE: - rc = rc + node.data - return rc.strip() - - def parseString(self, requestString): - try: - self._domObj = MDOM.parseString(requestString) - except xml.parsers.expat.ExpatError, e: - Utils.log("XML string parse error: %s" % str(e)) - return False - return True - - def parseFile(self, fileName): - try: - self._domObj = MDOM.parse(fileName) - except IOError, e: - Utils.log("error reading file: %s" % str(e)) - return False - except xml.parsers.expat.ExpatError, e: - Utils.log("XML file %s parse error: %s" % (fileName, str(e))) - return False - return True - - def setDomObj(self, dom): - if dom and type(dom) != type([]): - self._domObj = dom - return True - return False - - def createTextNode(self, text): - if not self._domObj: - return False - if not text: - return False - return self._domObj.createTextNode(str(text)) - - def createTag(self, tag, text=None): - if not self._domObj: - return None - if tag == None: - return None - - tagE = self._domObj.createElement(str(tag)) - if text: - tagEText = self._domObj.createTextNode(str(text)) - tagE.appendChild(tagEText) - return tagE - - def addTag(self, tag): - if not self._domObj: - return False - if not tag: - return False - - self._domObj.appendChild(tag) - return True - - def createTagRoute(self, tagRoute, text=None): - if not tagRoute: - return False - - tagList = tagRoute.split(".") - tag = None - previousTag = None - for tagName in tagList[:-1]: - newTag = self.createTag(tagName, None) - if not tag: - tag = newTag - previousTag = newTag - continue - previousTag.appendChild(newTag) - previousTag = newTag - - if previousTag: - previousTag.appendChild(self.createTag(tagList[-1], text)) - else: - tag = self.createTag(tagList[-1], text) - return tag - - def appendTagRoute(self, tagRoute, value=None): - if not self._domObj: - return False - if not tagRoute: - return False - - parentTagE = self._domObj - - tagNameList = tagRoute.split(".") - newTagRoute = tagNameList.pop(-1) - - for i in range(len(tagNameList), 0, -1): - tagE = self.getElementsByTagRoute(".".join(tagNameList[:i])) - if tagE: - parentTagE = tagE[0] - break - newTagRoute = tagNameList[i-1] + "." + newTagRoute - - newTagE = self.createTagRoute(newTagRoute, value) - if not newTagE: - return False - try: - parentTagE.appendChild(newTagE) - except xml.dom.HierarchyRequestErr, e: - Utils.log("error occured. %s" + str(e)) - return False - return True - - def setTextByTagRoute(self, tagRoute, tagValue): - if not self._domObj: - return None - - if not tagRoute: - return None - - tagE = self.getElementsByTagRoute(tagRoute) - if not tagE: - return False - - parentTagE = self.getElementsByTagRoute(".".join(tagRoute.split(".")[:-1])) - if not parentTagE: - return False - - parentTagE[0].childNodes.remove(tagE[0]) - parentTagE[0].appendChild(self.createTag(tagRoute.split(".")[-1], tagValue)) - return True - - def getElementsByTagRoute(self, tagRoute): - if not self._domObj: - return None - - if not tagRoute: - return None - - x = None - for tag in tagRoute.split("."): - if x is None: - x = self._domObj.getElementsByTagName(tag) - continue - if x == []: - break - x = x[0].getElementsByTagName(tag) - return x - - def getTextByTagRoute(self, tagRoute): - if not self._domObj: - return None - - x = self.getElementsByTagRoute(tagRoute) - if x: - return self.getText(x[0].childNodes) - return None - - def getElementsByTagName(self, name): - if not self._domObj: - return None - return self._domObj.getElementsByTagName(name) - - def writexml(self, fileName, indent="", addindent="", newl=""): - if not self._domObj: - return None - try: - fp = open(fileName, "w") - self._domObj.writexml(fp, indent, addindent, newl) - fp.close() - return True - except IOError: - return False - - def toString(self, indent=" ", newl="\n", encoding = None): - if not self._domObj: - return None - return self._domObj.toprettyxml(indent, newl, encoding) - - def toxml(self, encoding = None): - if not self._domObj: - return None - return self._domObj.toxml(encoding) - - def toprettyxml(self, indent=" ", newl="\n", encoding = None): - return self.toString(indent, newl, encoding) - - def getAttribute(self, attributeName): - if not attributeName: - return None - try: - return self.getElementsByTagName("command")[0].getAttribute(attributeName) - except IndexError: - return False - - def setAttribute(self, attributeName, attributeValue): - if not (attributeName and attributeValue): - return None - try: - return self.getElementsByTagName("command")[0].setAttribute(attributeName, attributeValue) - except IndexError: - return False - - def getRequestCommand(self): - return self.getAttribute("request") - - def getResponseCommand(self): - return self.getAttribute("response") - - def getResponseCode(self): - return self.getAttribute("response-code") - - def getMessageId(self): - return self.getAttribute("id") - - def getVersion(self): - return self.getAttribute("version") - - def getRequestAction(self): - return self.getAttribute("action") - - def setVersion(self, value): - return self.setAttribute("version", value) - - def setRequestAction(self, value): - return self.setAttribute("action", value) - - def createCommandTag(self, command, responseCode, id, version=Globals.GLUSTER_PLATFORM_VERSION): - commandTag = self._domObj.createElement("command") - commandTag.setAttribute("response", command) - commandTag.setAttribute("response-code", responseCode) - commandTag.setAttribute("id", id) - commandTag.setAttribute("version", version) - return commandTag -##--end of XDOM - -class RequestXml(XDOM): - def __init__(self, requestString, type=None): - if None == requestString: - XDOM.__init__(self) - return - try: - if None == type: - if os.path.isfile(requestString): - self._domObj = MDOM.parse(requestString) - else: - self._domObj = MDOM.parseString(requestString) - elif XML_FILE == type: - self._domObj = MDOM.parse(requestString) - elif XML_STRING == type: - self._domObj = MDOM.parseString(requestString) - except IOError: - XDOM.__init__(self) - except xml.parsers.expat.ExpatError: - XDOM.__init__(self) - -##--end of RequestXML - -class ResponseXml(XDOM): - _commandTag = None - def __init__(self, command, responseCode, id, version=Globals.GLUSTER_PLATFORM_VERSION): - XDOM.__init__(self) - if command and responseCode and id: - self._commandTag = self.createCommandTag(command, responseCode, id, version) - self._domObj.appendChild(self._commandTag) - - def appendCommand(self, command, responseCode, id, version=Globals.GLUSTER_PLATFORM_VERSION): - if command and responseCode and id: - self._commandTag = self.createCommandTag(command, responseCode, id, version) - self._domObj.appendChild(self._commandTag) - return True - return False - - def append(self, tagName, tagValue=None): - if not self._commandTag: - return False - tag = self.createTag(tagName, tagValue) - if tag: - self._commandTag.appendChild(tag) - return True - return False - - def appendTag(self, tag): - if not tag: - return False - if not self._commandTag: - return False - self._commandTag.appendChild(tag) - return True - - def appendTagRoute(self, tagRoute, value=None): - if not self._commandTag: - return False - if not tagRoute: - return False - - parentTagE = self._commandTag - - tagNameList = tagRoute.split(".") - newTagRoute = tagNameList.pop(-1) - - for i in range(len(tagNameList), 0, -1): - tagE = self.getElementsByTagRoute(".".join(["command"] + tagNameList[:i])) - if tagE: - parentTagE = tagE[0] - break - newTagRoute = tagNameList[i-1] + "." + newTagRoute - - newTagE = self.createTagRoute(newTagRoute, value) - if not newTagE: - return False - try: - parentTagE.appendChild(newTagE) - except xml.dom.HierarchyRequestErr, e: - Utils.log("error occured. %s" + str(e)) - return False - return True - - def appendTagRouteOld(self, tagRoute, value=None): - if not tagRoute: - return False - if not self._commandTag: - return False - - tmpTagRoute = "" - previousTagE = self._commandTag - tagE = None - for tagName in tagRoute.split("."): - if not tmpTagRoute: - tagE = self.getElementsByTagRoute("command." + tagName) - else: - tagE = self.getElementsByTagRoute("command." + tmpTagRoute + "." + tagName) - if not tagE: - break - if len(tagE) != 1: - return False - previousTagE = tagE[0] - if not tmpTagRoute: - tmpTagRoute = tagName - else: - tmpTagRoute = tmpTagRoute + "." + tagName - - if tmpTagRoute == tagRoute: - return False - newTagRoute = tagRoute[len(tmpTagRoute):] - if newTagRoute[0] == '.': - newTagRoute = newTagRoute[1:] - - if previousTagE.childNodes and previousTagE.childNodes[0].nodeType == previousTagE.TEXT_NODE: - return False - previousTagE.appendChild(self.createTagRoute(newTagRoute, value)) - return True -##--end of ResponseXml - -def test(): - #volumes = RequestXml(VolumeFile, XML_FILE).getElementsByTagRoute("volume-list.volume") - requestStr = '''<command request="create-volume" id="123" version="3.1"> -<volume> -<name>movies1</name> -<type>cluster mirror</type> -<start>512000</start> -<server>zresearch</server> -<vacl>192.168.20.*</vacl> -<vacl>192.168.30.*</vacl> -<nfs> -<export>no</export> -</nfs> -<cifs> -<export>no</export> -</cifs> -<webdav> -<export>no</export> -</webdav> -</volume> -</command>''' - - requestXml = RequestXml(requestStr) - print requestXml.getAttribute("") - -def test1(): - rs = ResponseXml("create-volume", "OK", "xyz") - rs.appendTagRoute("volume.detail.name", "music") - print rs.toprettyxml() - rs.append("volume", "data") - print rs.toprettyxml() - rs.appendTagRoute("volume.detail.ipaddr", "192.168.10.1") - print rs.toprettyxml() - print rs.appendTagRoute("volume.detail.ipaddr.v6", "ff:ff::ff::") - print rs.toprettyxml() - - print rs.getTextByTagRoute("command.volume.detail") - -def test2(): - rs = ResponseXml("download-volume-logs", "OK", "xyz") - te = rs.createTag("interface", None) - te.appendChild(rs.createTag("device", "DEVICE1")) - te.appendChild(rs.createTag("description", "my device one")) - rs.appendTag(te) - - te = rs.createTag("interface", None) - te.appendChild(rs.createTag("device", "DEVICE2")) - te.appendChild(rs.createTag("description", "my device two")) - rs.appendTag(te) - print rs.toprettyxml() - diff --git a/src/com.gluster.storage.management.gateway/WebContent/scripts/XmlHandler.py b/src/com.gluster.storage.management.gateway/WebContent/scripts/XmlHandler.py deleted file mode 100644 index b9db15c8..00000000 --- a/src/com.gluster.storage.management.gateway/WebContent/scripts/XmlHandler.py +++ /dev/null @@ -1,346 +0,0 @@ -# Copyright (C) 2009 Gluster, Inc. <http://www.gluster.com> -# This file is part of Gluster Storage Platform. -# -# Gluster Storage Platform is free software; you can redistribute it -# and/or modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 3 of -# the License, or (at your option) any later version. -# -# Gluster Storage Platform is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see -# <http://www.gnu.org/licenses/>. - -import xml -import xml.parsers.expat -import xml.dom.minidom as MDOM -import os -import Globals -import copy -import Utils - -XML_STRING = 0 -XML_FILE = 1 - -class XDOM: - _domObj = None - - def __init__(self): - self._domObj = MDOM.Document() - return - - @classmethod - def getText(self, nodeList): - rc = "" - for node in nodeList: - if node.nodeType == node.TEXT_NODE: - rc = rc + node.data - return rc - - def parseString(self, requestString): - try: - self._domObj = MDOM.parseString(requestString) - except xml.parsers.expat.ExpatError, e: - Utils.log("XML string parse error: %s" % str(e)) - return False - return True - - def parseFile(self, fileName): - try: - self._domObj = MDOM.parse(fileName) - except IOError, e: - Utils.log("error reading file: %s" % str(e)) - return False - except xml.parsers.expat.ExpatError, e: - Utils.log("XML file %s parse error: %s" % (fileName, str(e))) - return False - return True - - def setDomObj(self, dom): - if dom and type(dom) != type([]): - self._domObj = dom - return True - return False - - def createTag(self, tag, text=None): - if not self._domObj: - return None - if tag == None: - return None - - tagE = self._domObj.createElement(str(tag)) - if text: - tagEText = self._domObj.createTextNode(str(text)) - tagE.appendChild(tagEText) - return tagE - - def addTag(self, tag): - if not self._domObj: - return False - if not tag: - return False - - self._domObj.appendChild(tag) - return True - - def createTagRoute(self, tagRoute, text=None): - if not tagRoute: - return False - - tagList = tagRoute.split(".") - tag = None - previousTag = None - for tagName in tagList[:-1]: - newTag = self.createTag(tagName, None) - if not tag: - tag = newTag - previousTag = newTag - continue - previousTag.appendChild(newTag) - previousTag = newTag - - if previousTag: - previousTag.appendChild(self.createTag(tagList[-1], text)) - else: - tag = self.createTag(tagList[-1], text) - return tag - - def appendTagRoute(self, tagRoute, value=None): - if not self._domObj: - return False - if not tagRoute: - return False - - parentTagE = self._domObj - - tagNameList = tagRoute.split(".") - newTagRoute = tagNameList.pop(-1) - - for i in range(len(tagNameList), 0, -1): - tagE = self.getElementsByTagRoute(".".join(tagNameList[:i])) - if tagE: - parentTagE = tagE[0] - break - newTagRoute = tagNameList[i-1] + "." + newTagRoute - - newTagE = self.createTagRoute(newTagRoute, value) - if not newTagE: - return False - try: - parentTagE.appendChild(newTagE) - except xml.dom.HierarchyRequestErr, e: - Utils.log("error occured. %s" + str(e)) - return False - return True - - def setTextByTagRoute(self, tagRoute, tagValue): - if not self._domObj: - return None - - if not tagRoute: - return None - - tagE = self.getElementsByTagRoute(tagRoute) - if not tagE: - return False - - parentTagE = self.getElementsByTagRoute(".".join(tagRoute.split(".")[:-1])) - if not parentTagE: - return False - - parentTagE[0].childNodes.remove(tagE[0]) - parentTagE[0].appendChild(self.createTag(tagRoute.split(".")[-1], tagValue)) - return True - - def getElementsByTagRoute(self, tagRoute): - if not self._domObj: - return None - - if not tagRoute: - return None - - x = None - for tag in tagRoute.split("."): - if x is None: - x = self._domObj.getElementsByTagName(tag) - continue - if x == []: - break - x = x[0].getElementsByTagName(tag) - return x - - def getTextByTagRoute(self, tagRoute): - if not self._domObj: - return None - - x = self.getElementsByTagRoute(tagRoute) - if x: - return self.getText(x[0].childNodes) - return None - - def getElementsByTagName(self, name): - if not self._domObj: - return None - return self._domObj.getElementsByTagName(name) - - def writexml(self, fileName, indent="", addindent="", newl=""): - if not self._domObj: - return None - try: - fp = open(fileName, "w") - self._domObj.writexml(fp, indent, addindent, newl) - fp.close() - return True - except IOError: - return False - - def toString(self, indent=" ", newl="\n", encoding = None): - if not self._domObj: - return None - return self._domObj.toprettyxml(indent, newl, encoding) - - def toxml(self, encoding = None): - if not self._domObj: - return None - return self._domObj.toxml(encoding) - - def toprettyxml(self, indent=" ", newl="\n", encoding = None): - return self.toString(indent, newl, encoding) - - def createResponseTag(self): - responseTag = self._domObj.createElement("response") - return responseTag -##--end of XDOM - -class RequestXml(XDOM): - def __init__(self, requestString, type=None): - if None == requestString: - XDOM.__init__(self) - return - try: - if None == type: - if os.path.isfile(requestString): - self._domObj = MDOM.parse(requestString) - else: - self._domObj = MDOM.parseString(requestString) - elif XML_FILE == type: - self._domObj = MDOM.parse(requestString) - elif XML_STRING == type: - self._domObj = MDOM.parseString(requestString) - except IOError: - XDOM.__init__(self) - except xml.parsers.expat.ExpatError: - XDOM.__init__(self) - -##--end of RequestXML - - -class ResponseXml(XDOM): - _responseTag = None - def __init__(self): - XDOM.__init__(self) - self._responseTag = self.createResponseTag() - self._domObj.appendChild(self._responseTag) - - @classmethod - def errorResponse(self, message): - if not self.responseTag: - return False - self.appendTagRoute("status.code", "-1"); - self.appendTagRoute("status.message", message) - - def append(self, tagName, tagValue=None): - if not self._responseTag: - return False - tag = self.createTag(tagName, tagValue) - if tag: - self._responseTag.appendChild(tag) - return True - return False - - def appendTag(self, tag): - if not tag: - return False - if not self._responseTag: - return False - self._responseTag.appendChild(tag) - return True - - def appendTagRoute(self, tagRoute, value=None): - if not self._responseTag: - return None - if not tagRoute: - return None - - parentTagE = self._responseTag - - tagNameList = tagRoute.split(".") - newTagRoute = tagNameList.pop(-1) - - for i in range(len(tagNameList), 0, -1): - tagE = self.getElementsByTagRoute(".".join(["response"] + tagNameList[:i])) - if tagE: - parentTagE = tagE[0] - break - newTagRoute = tagNameList[i-1] + "." + newTagRoute - - newTagE = self.createTagRoute(newTagRoute, value) - if not newTagE: - return None - try: - parentTagE.appendChild(newTagE) - except xml.dom.HierarchyRequestErr, e: - Utils.log("error occured. %s" + str(e)) - return None - return newTagE - - def appendTagRouteOld(self, tagRoute, value=None): - if not self._responseTag: - return False - if not tagRoute: - return False - - parentTagE = self._responseTag - - tagNameList = tagRoute.split(".") - newTagRoute = tagNameList.pop(-1) - - for i in range(len(tagNameList), 0, -1): - tagE = self.getElementsByTagRoute(".".join(["response"] + tagNameList[:i])) - if tagE: - parentTagE = tagE[0] - break - newTagRoute = tagNameList[i-1] + "." + newTagRoute - - newTagE = self.createTagRoute(newTagRoute, value) - if not newTagE: - return False - try: - parentTagE.appendChild(newTagE) - except xml.dom.HierarchyRequestErr, e: - Utils.log("error occured. %s" + str(e)) - return False - return True -##--end of ResponseXml - -def test(): - rs = ResponseXml() - rs.appendTagRoute("status.code", "0"); - rs.appendTagRoute("status.message", "SUCCESS") - serverTag = rs.appendTagRoute("server.name", "Server1") - networkInterfaces = rs.appendTagRoute("server.networkInterfaces", None) - networkTag = rs.createTag("networkInterface", None) - networkTag.appendChild(rs.createTag("name", "interface1")) - networkTag.appendChild(rs.createTag("ipaddress", "192.168.1.40")) - networkInterfaces.appendChild(networkTag) - networkTag = rs.createTag("networkInterface", None) - networkTag.appendChild(rs.createTag("name", "interface2")) - networkTag.appendChild(rs.createTag("ipaddress", "192.168.1.41")) - networkInterfaces.appendChild(networkTag) - print rs.toprettyxml() - -#test() diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/UsersResource.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/UsersResource.java index d67a024e..6914e505 100644 --- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/UsersResource.java +++ b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/UsersResource.java @@ -18,6 +18,8 @@ *******************************************************************************/ package com.gluster.storage.management.gateway.resources.v1_0; +import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_NEW_PASSWORD; +import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_OLD_PASSWORD; import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_USER; import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_USERS; @@ -89,8 +91,9 @@ public class UsersResource extends AbstractResource { @Path("{" + PATH_PARAM_USER + "}") @PUT - public Response changePassword(@PathParam("user") String username, @FormParam("oldpassword") String oldPassword, - @FormParam("newpassword") String newPassword) { + public Response changePassword(@PathParam(PATH_PARAM_USER) String username, + @FormParam(FORM_PARAM_OLD_PASSWORD) String oldPassword, + @FormParam(FORM_PARAM_NEW_PASSWORD) String newPassword) { try { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); String loggedInUser = ((UserDetails)auth.getPrincipal()).getUsername(); @@ -100,13 +103,16 @@ public class UsersResource extends AbstractResource { + "] is not allowed to change password of user [" + username + "]!"); } - String correctOldPassword = auth.getCredentials().toString(); - if(!oldPassword.equals(correctOldPassword)) { + UserDetails user = userDetailsService.loadUserByUsername(username); + Object salt = saltSource.getSalt(user); + + String actualOldPasswordEncoded = ((UserDetails)auth.getPrincipal()).getPassword(); + String oldPasswordEncoded = passwordEncoder.encodePassword(oldPassword, salt); + if(!oldPasswordEncoded.equals(actualOldPasswordEncoded)) { throw new GlusterValidationException("Invalid old password!"); } - UserDetails user = userDetailsService.loadUserByUsername(username); - String encodedNewPassword = passwordEncoder.encodePassword(newPassword, saltSource.getSalt(user)); + String encodedNewPassword = passwordEncoder.encodePassword(newPassword, salt); jdbcUserService.changePassword(oldPassword, encodedNewPassword); } catch (Exception ex) { String errMsg = "Could not change password. Error: [" + ex.getMessage() + "]"; |
