aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/ApplicationPlugins
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/ApplicationPlugins')
-rw-r--r--OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs23
-rw-r--r--OpenSim/ApplicationPlugins/LoadRegions/Properties/AssemblyInfo.cs2
-rw-r--r--OpenSim/ApplicationPlugins/RegionModulesController/Properties/AssemblyInfo.cs2
-rw-r--r--OpenSim/ApplicationPlugins/RemoteController/Properties/AssemblyInfo.cs2
-rw-r--r--OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs229
5 files changed, 221 insertions, 37 deletions
diff --git a/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs b/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs
index fcb6991..1d63d26 100644
--- a/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs
+++ b/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs
@@ -115,6 +115,8 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
115 Environment.Exit(1); 115 Environment.Exit(1);
116 } 116 }
117 117
118 List<IScene> createdScenes = new List<IScene>();
119
118 for (int i = 0; i < regionsToLoad.Length; i++) 120 for (int i = 0; i < regionsToLoad.Length; i++)
119 { 121 {
120 IScene scene; 122 IScene scene;
@@ -123,17 +125,22 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
123 ")"); 125 ")");
124 126
125 bool changed = m_openSim.PopulateRegionEstateInfo(regionsToLoad[i]); 127 bool changed = m_openSim.PopulateRegionEstateInfo(regionsToLoad[i]);
128
126 m_openSim.CreateRegion(regionsToLoad[i], true, out scene); 129 m_openSim.CreateRegion(regionsToLoad[i], true, out scene);
130 createdScenes.Add(scene);
131
127 if (changed) 132 if (changed)
128 regionsToLoad[i].EstateSettings.Save(); 133 regionsToLoad[i].EstateSettings.Save();
129 134 }
130 if (scene != null) 135
136 foreach (IScene scene in createdScenes)
137 {
138 scene.Start();
139
140 m_newRegionCreatedHandler = OnNewRegionCreated;
141 if (m_newRegionCreatedHandler != null)
131 { 142 {
132 m_newRegionCreatedHandler = OnNewRegionCreated; 143 m_newRegionCreatedHandler(scene);
133 if (m_newRegionCreatedHandler != null)
134 {
135 m_newRegionCreatedHandler(scene);
136 }
137 } 144 }
138 } 145 }
139 } 146 }
diff --git a/OpenSim/ApplicationPlugins/LoadRegions/Properties/AssemblyInfo.cs b/OpenSim/ApplicationPlugins/LoadRegions/Properties/AssemblyInfo.cs
index 1b6a3e1..4968e7b 100644
--- a/OpenSim/ApplicationPlugins/LoadRegions/Properties/AssemblyInfo.cs
+++ b/OpenSim/ApplicationPlugins/LoadRegions/Properties/AssemblyInfo.cs
@@ -62,4 +62,4 @@ using System.Runtime.InteropServices;
62// by using the '*' as shown below: 62// by using the '*' as shown below:
63// [assembly: AssemblyVersion("0.7.6.*")] 63// [assembly: AssemblyVersion("0.7.6.*")]
64 64
65[assembly : AssemblyVersion("0.7.6.*")] 65[assembly : AssemblyVersion("0.8.0.*")]
diff --git a/OpenSim/ApplicationPlugins/RegionModulesController/Properties/AssemblyInfo.cs b/OpenSim/ApplicationPlugins/RegionModulesController/Properties/AssemblyInfo.cs
index 5683a72..ddef158 100644
--- a/OpenSim/ApplicationPlugins/RegionModulesController/Properties/AssemblyInfo.cs
+++ b/OpenSim/ApplicationPlugins/RegionModulesController/Properties/AssemblyInfo.cs
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
29// Build Number 29// Build Number
30// Revision 30// Revision
31// 31//
32[assembly: AssemblyVersion("0.7.6.*")] 32[assembly: AssemblyVersion("0.8.0.*")]
33 33
diff --git a/OpenSim/ApplicationPlugins/RemoteController/Properties/AssemblyInfo.cs b/OpenSim/ApplicationPlugins/RemoteController/Properties/AssemblyInfo.cs
index a9d3f74..dd34cc8 100644
--- a/OpenSim/ApplicationPlugins/RemoteController/Properties/AssemblyInfo.cs
+++ b/OpenSim/ApplicationPlugins/RemoteController/Properties/AssemblyInfo.cs
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
29// Build Number 29// Build Number
30// Revision 30// Revision
31// 31//
32[assembly: AssemblyVersion("0.7.6.*")] 32[assembly: AssemblyVersion("0.8.0.*")]
33 33
diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
index d2a5c43..4c05ec8 100644
--- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
+++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
@@ -28,6 +28,7 @@
28using System; 28using System;
29using System.Collections; 29using System.Collections;
30using System.Collections.Generic; 30using System.Collections.Generic;
31using System.Globalization;
31using System.IO; 32using System.IO;
32using System.Xml; 33using System.Xml;
33using System.Net; 34using System.Net;
@@ -51,6 +52,7 @@ using OpenSim.Services.Interfaces;
51using PresenceInfo = OpenSim.Services.Interfaces.PresenceInfo; 52using PresenceInfo = OpenSim.Services.Interfaces.PresenceInfo;
52using GridRegion = OpenSim.Services.Interfaces.GridRegion; 53using GridRegion = OpenSim.Services.Interfaces.GridRegion;
53using PermissionMask = OpenSim.Framework.PermissionMask; 54using PermissionMask = OpenSim.Framework.PermissionMask;
55using RegionInfo = OpenSim.Framework.RegionInfo;
54 56
55namespace OpenSim.ApplicationPlugins.RemoteController 57namespace OpenSim.ApplicationPlugins.RemoteController
56{ 58{
@@ -149,6 +151,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
149 availableMethods["admin_create_user_email"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcCreateUserMethod); 151 availableMethods["admin_create_user_email"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcCreateUserMethod);
150 availableMethods["admin_exists_user"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcUserExistsMethod); 152 availableMethods["admin_exists_user"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcUserExistsMethod);
151 availableMethods["admin_update_user"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcUpdateUserAccountMethod); 153 availableMethods["admin_update_user"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcUpdateUserAccountMethod);
154 availableMethods["admin_authenticate_user"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcAuthenticateUserMethod);
152 155
153 // Region state management 156 // Region state management
154 availableMethods["admin_load_xml"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcLoadXMLMethod); 157 availableMethods["admin_load_xml"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcLoadXMLMethod);
@@ -161,6 +164,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
161 availableMethods["admin_acl_add"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcAccessListAdd); 164 availableMethods["admin_acl_add"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcAccessListAdd);
162 availableMethods["admin_acl_remove"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcAccessListRemove); 165 availableMethods["admin_acl_remove"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcAccessListRemove);
163 availableMethods["admin_acl_list"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcAccessListList); 166 availableMethods["admin_acl_list"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcAccessListList);
167 availableMethods["admin_estate_reload"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcEstateReload);
164 168
165 // Misc 169 // Misc
166 availableMethods["admin_refresh_search"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcRefreshSearch); 170 availableMethods["admin_refresh_search"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcRefreshSearch);
@@ -439,18 +443,26 @@ namespace OpenSim.ApplicationPlugins.RemoteController
439 // k, (string)requestData[k], ((string)requestData[k]).Length); 443 // k, (string)requestData[k], ((string)requestData[k]).Length);
440 // } 444 // }
441 445
442 CheckStringParameters(requestData, responseData, new string[] {"filename", "regionid"}); 446 CheckStringParameters(requestData, responseData, new string[] { "filename" });
443 CheckRegionParams(requestData, responseData); 447 CheckRegionParams(requestData, responseData);
444 448
445 Scene scene = null; 449 Scene scene = null;
446 GetSceneFromRegionParams(requestData, responseData, out scene); 450 GetSceneFromRegionParams(requestData, responseData, out scene);
447 string file = (string)requestData["filename"];
448 451
449 responseData["accepted"] = true; 452 if (scene != null)
453 {
454 string file = (string)requestData["filename"];
450 455
451 LoadHeightmap(file, scene.RegionInfo.RegionID); 456 responseData["accepted"] = true;
452 457
453 responseData["success"] = true; 458 LoadHeightmap(file, scene.RegionInfo.RegionID);
459
460 responseData["success"] = true;
461 }
462 else
463 {
464 responseData["success"] = false;
465 }
454 466
455 m_log.Info("[RADMIN]: Load height maps request complete"); 467 m_log.Info("[RADMIN]: Load height maps request complete");
456 } 468 }
@@ -464,23 +476,30 @@ namespace OpenSim.ApplicationPlugins.RemoteController
464 476
465// m_log.DebugFormat("[RADMIN]: Save Terrain: XmlRpc {0}", request.ToString()); 477// m_log.DebugFormat("[RADMIN]: Save Terrain: XmlRpc {0}", request.ToString());
466 478
467 CheckStringParameters(requestData, responseData, new string[] { "filename", "regionid" }); 479 CheckStringParameters(requestData, responseData, new string[] { "filename" });
468 CheckRegionParams(requestData, responseData); 480 CheckRegionParams(requestData, responseData);
469 481
470 Scene region = null; 482 Scene scene = null;
471 GetSceneFromRegionParams(requestData, responseData, out region); 483 GetSceneFromRegionParams(requestData, responseData, out scene);
472 484
473 string file = (string)requestData["filename"]; 485 if (scene != null)
474 m_log.InfoFormat("[RADMIN]: Terrain Saving: {0}", file); 486 {
487 string file = (string)requestData["filename"];
488 m_log.InfoFormat("[RADMIN]: Terrain Saving: {0}", file);
475 489
476 responseData["accepted"] = true; 490 responseData["accepted"] = true;
477 491
478 ITerrainModule terrainModule = region.RequestModuleInterface<ITerrainModule>(); 492 ITerrainModule terrainModule = scene.RequestModuleInterface<ITerrainModule>();
479 if (null == terrainModule) throw new Exception("terrain module not available"); 493 if (null == terrainModule) throw new Exception("terrain module not available");
480 494
481 terrainModule.SaveToFile(file); 495 terrainModule.SaveToFile(file);
482 496
483 responseData["success"] = true; 497 responseData["success"] = true;
498 }
499 else
500 {
501 responseData["success"] = false;
502 }
484 503
485 m_log.Info("[RADMIN]: Save height maps request complete"); 504 m_log.Info("[RADMIN]: Save height maps request complete");
486 } 505 }
@@ -832,6 +851,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
832 851
833 IScene newScene; 852 IScene newScene;
834 m_application.CreateRegion(region, out newScene); 853 m_application.CreateRegion(region, out newScene);
854 newScene.Start();
835 855
836 // If an access specification was provided, use it. 856 // If an access specification was provided, use it.
837 // Otherwise accept the default. 857 // Otherwise accept the default.
@@ -1226,7 +1246,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
1226 { 1246 {
1227 GridUserInfo userInfo = m_application.SceneManager.CurrentOrFirstScene.GridUserService.GetGridUserInfo(account.PrincipalID.ToString()); 1247 GridUserInfo userInfo = m_application.SceneManager.CurrentOrFirstScene.GridUserService.GetGridUserInfo(account.PrincipalID.ToString());
1228 if (userInfo != null) 1248 if (userInfo != null)
1229 responseData["lastlogin"] = userInfo.Login; 1249 responseData["lastlogin"] = Util.ToUnixTime(userInfo.Login);
1230 else 1250 else
1231 responseData["lastlogin"] = 0; 1251 responseData["lastlogin"] = 0;
1232 1252
@@ -1396,6 +1416,139 @@ namespace OpenSim.ApplicationPlugins.RemoteController
1396 } 1416 }
1397 1417
1398 /// <summary> 1418 /// <summary>
1419 /// Authenticate an user.
1420 /// <summary>
1421 /// <param name="request">incoming XML RPC request</param>
1422 /// <remarks>
1423 /// XmlRpcAuthenticateUserMethod takes the following XMLRPC
1424 /// parameters
1425 /// <list type="table">
1426 /// <listheader><term>parameter name</term><description>description</description></listheader>
1427 /// <item><term>password</term>
1428 /// <description>admin password as set in OpenSim.ini</description></item>
1429 /// <item><term>user_firstname</term>
1430 /// <description>avatar's first name</description></item>
1431 /// <item><term>user_lastname</term>
1432 /// <description>avatar's last name</description></item>
1433 /// <item><term>user_password</term>
1434 /// <description>MD5 hash of avatar's password</description></item>
1435 /// <item><term>token_lifetime</term>
1436 /// <description>the lifetime of the returned token (upper bounded to 30s)</description></item>
1437 /// </list>
1438 ///
1439 /// XmlRpcAuthenticateUserMethod returns
1440 /// <list type="table">
1441 /// <listheader><term>name</term><description>description</description></listheader>
1442 /// <item><term>success</term>
1443 /// <description>true or false</description></item>
1444 /// <item><term>token</term>
1445 /// <description>the authentication token sent by OpenSim</description></item>
1446 /// <item><term>error</term>
1447 /// <description>error message if success is false</description></item>
1448 /// </list>
1449 /// </remarks>
1450 private void XmlRpcAuthenticateUserMethod(XmlRpcRequest request, XmlRpcResponse response,
1451 IPEndPoint remoteClient)
1452 {
1453 m_log.Info("[RADMIN]: AuthenticateUser: new request");
1454
1455 var responseData = (Hashtable)response.Value;
1456 var requestData = (Hashtable)request.Params[0];
1457
1458 lock (m_requestLock)
1459 {
1460 try
1461 {
1462 CheckStringParameters(requestData, responseData, new[]
1463 {
1464 "user_firstname",
1465 "user_lastname",
1466 "user_password",
1467 "token_lifetime"
1468 });
1469
1470 var firstName = (string)requestData["user_firstname"];
1471 var lastName = (string)requestData["user_lastname"];
1472 var password = (string)requestData["user_password"];
1473
1474 var scene = m_application.SceneManager.CurrentOrFirstScene;
1475
1476 if (scene.Equals(null))
1477 {
1478 m_log.Debug("scene does not exist");
1479 throw new Exception("Scene does not exist.");
1480 }
1481
1482 var scopeID = scene.RegionInfo.ScopeID;
1483 var account = scene.UserAccountService.GetUserAccount(scopeID, firstName, lastName);
1484
1485 if (account.Equals(null) || account.PrincipalID.Equals(UUID.Zero))
1486 {
1487 m_log.DebugFormat("avatar {0} {1} does not exist", firstName, lastName);
1488 throw new Exception(String.Format("avatar {0} {1} does not exist", firstName, lastName));
1489 }
1490
1491 if (String.IsNullOrEmpty(password))
1492 {
1493 m_log.DebugFormat("[RADMIN]: AuthenticateUser: no password provided for {0} {1}", firstName,
1494 lastName);
1495 throw new Exception(String.Format("no password provided for {0} {1}", firstName,
1496 lastName));
1497 }
1498
1499 int lifetime;
1500 if (int.TryParse((string)requestData["token_lifetime"], NumberStyles.Integer, CultureInfo.InvariantCulture, out lifetime) == false)
1501 {
1502 m_log.DebugFormat("[RADMIN]: AuthenticateUser: no token lifetime provided for {0} {1}", firstName,
1503 lastName);
1504 throw new Exception(String.Format("no token lifetime provided for {0} {1}", firstName,
1505 lastName));
1506 }
1507
1508 // Upper bound on lifetime set to 30s.
1509 if (lifetime > 30)
1510 {
1511 m_log.DebugFormat("[RADMIN]: AuthenticateUser: token lifetime longer than 30s for {0} {1}", firstName,
1512 lastName);
1513 throw new Exception(String.Format("token lifetime longer than 30s for {0} {1}", firstName,
1514 lastName));
1515 }
1516
1517 var authModule = scene.RequestModuleInterface<IAuthenticationService>();
1518 if (authModule == null)
1519 {
1520 m_log.Debug("[RADMIN]: AuthenticateUser: no authentication module loded");
1521 throw new Exception("no authentication module loaded");
1522 }
1523
1524 var token = authModule.Authenticate(account.PrincipalID, password, lifetime);
1525 if (String.IsNullOrEmpty(token))
1526 {
1527 m_log.DebugFormat("[RADMIN]: AuthenticateUser: authentication failed for {0} {1}", firstName,
1528 lastName);
1529 throw new Exception(String.Format("authentication failed for {0} {1}", firstName,
1530 lastName));
1531 }
1532
1533 m_log.DebugFormat("[RADMIN]: AuthenticateUser: account for user {0} {1} identified with token {2}",
1534 firstName, lastName, token);
1535
1536 responseData["token"] = token;
1537 responseData["success"] = true;
1538
1539 }
1540 catch (Exception e)
1541 {
1542 responseData["success"] = false;
1543 responseData["error"] = e.Message;
1544 throw e;
1545 }
1546
1547 m_log.Info("[RADMIN]: AuthenticateUser: request complete");
1548 }
1549 }
1550
1551 /// <summary>
1399 /// Load an OAR file into a region.. 1552 /// Load an OAR file into a region..
1400 /// <summary> 1553 /// <summary>
1401 /// <param name="request">incoming XML RPC request</param> 1554 /// <param name="request">incoming XML RPC request</param>
@@ -1523,7 +1676,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
1523 /// </remarks> 1676 /// </remarks>
1524 private void XmlRpcSaveOARMethod(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient) 1677 private void XmlRpcSaveOARMethod(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient)
1525 { 1678 {
1526 m_log.Info("[RADMIN]: Received Save OAR Administrator Request"); 1679 m_log.Info("[RADMIN]: Received Save OAR Request");
1527 1680
1528 Hashtable responseData = (Hashtable)response.Value; 1681 Hashtable responseData = (Hashtable)response.Value;
1529 Hashtable requestData = (Hashtable)request.Params[0]; 1682 Hashtable requestData = (Hashtable)request.Params[0];
@@ -1569,8 +1722,14 @@ namespace OpenSim.ApplicationPlugins.RemoteController
1569 1722
1570 if (archiver != null) 1723 if (archiver != null)
1571 { 1724 {
1725 Guid requestId = Guid.NewGuid();
1572 scene.EventManager.OnOarFileSaved += RemoteAdminOarSaveCompleted; 1726 scene.EventManager.OnOarFileSaved += RemoteAdminOarSaveCompleted;
1573 archiver.ArchiveRegion(filename, options); 1727
1728 m_log.InfoFormat(
1729 "[RADMIN]: Submitting save OAR request for {0} to file {1}, request ID {2}",
1730 scene.Name, filename, requestId);
1731
1732 archiver.ArchiveRegion(filename, requestId, options);
1574 1733
1575 lock (m_saveOarLock) 1734 lock (m_saveOarLock)
1576 Monitor.Wait(m_saveOarLock,5000); 1735 Monitor.Wait(m_saveOarLock,5000);
@@ -1591,12 +1750,16 @@ namespace OpenSim.ApplicationPlugins.RemoteController
1591 throw e; 1750 throw e;
1592 } 1751 }
1593 1752
1594 m_log.Info("[RADMIN]: Save OAR Administrator Request complete"); 1753 m_log.Info("[RADMIN]: Save OAR Request complete");
1595 } 1754 }
1596 1755
1597 private void RemoteAdminOarSaveCompleted(Guid uuid, string name) 1756 private void RemoteAdminOarSaveCompleted(Guid uuid, string name)
1598 { 1757 {
1599 m_log.DebugFormat("[RADMIN]: File processing complete for {0}", name); 1758 if (name != "")
1759 m_log.ErrorFormat("[RADMIN]: Saving of OAR file with request ID {0} failed with message {1}", uuid, name);
1760 else
1761 m_log.DebugFormat("[RADMIN]: Saved OAR file for request {0}", uuid);
1762
1600 lock (m_saveOarLock) 1763 lock (m_saveOarLock)
1601 Monitor.Pulse(m_saveOarLock); 1764 Monitor.Pulse(m_saveOarLock);
1602 } 1765 }
@@ -1903,6 +2066,22 @@ namespace OpenSim.ApplicationPlugins.RemoteController
1903 m_log.Info("[RADMIN]: Access List List Request complete"); 2066 m_log.Info("[RADMIN]: Access List List Request complete");
1904 } 2067 }
1905 2068
2069 private void XmlRpcEstateReload(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient)
2070 {
2071 m_log.Info("[RADMIN]: Received Estate Reload Request");
2072
2073 Hashtable responseData = (Hashtable)response.Value;
2074// Hashtable requestData = (Hashtable)request.Params[0];
2075
2076 m_application.SceneManager.ForEachScene(s =>
2077 s.RegionInfo.EstateSettings = m_application.EstateDataService.LoadEstateSettings(s.RegionInfo.RegionID, false)
2078 );
2079
2080 responseData["success"] = true;
2081
2082 m_log.Info("[RADMIN]: Estate Reload Request complete");
2083 }
2084
1906 private void XmlRpcGetAgentsMethod(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient) 2085 private void XmlRpcGetAgentsMethod(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient)
1907 { 2086 {
1908 Hashtable responseData = (Hashtable)response.Value; 2087 Hashtable responseData = (Hashtable)response.Value;
@@ -2792,13 +2971,11 @@ namespace OpenSim.ApplicationPlugins.RemoteController
2792 { 2971 {
2793 if (item.InvType == (int)InventoryType.Object && (item.CurrentPermissions & 7) != 0) 2972 if (item.InvType == (int)InventoryType.Object && (item.CurrentPermissions & 7) != 0)
2794 { 2973 {
2795 if ((item.CurrentPermissions & ((uint)PermissionMask.Copy >> 13)) == 0) 2974 uint perms = item.CurrentPermissions;
2796 item.CurrentPermissions &= ~(uint)PermissionMask.Copy; 2975 PermissionsUtil.ApplyFoldedPermissions(item.CurrentPermissions, ref perms);
2797 if ((item.CurrentPermissions & ((uint)PermissionMask.Transfer >> 13)) == 0) 2976 item.CurrentPermissions = perms;
2798 item.CurrentPermissions &= ~(uint)PermissionMask.Transfer;
2799 if ((item.CurrentPermissions & ((uint)PermissionMask.Modify >> 13)) == 0)
2800 item.CurrentPermissions &= ~(uint)PermissionMask.Modify;
2801 } 2977 }
2978
2802 item.CurrentPermissions &= item.NextPermissions; 2979 item.CurrentPermissions &= item.NextPermissions;
2803 item.BasePermissions &= item.NextPermissions; 2980 item.BasePermissions &= item.NextPermissions;
2804 item.EveryOnePermissions &= item.NextPermissions; 2981 item.EveryOnePermissions &= item.NextPermissions;