private bool checkTaskPerm(SimObject exportPrim, InventoryItem item, BotClient Client, OutputDelegate Failure, bool mustModify) { SimAvatarClient theAvatar = Client.TheSimAvatar; PermissionWho pw = theAvatar.EffectivePermissionWho(item.OwnerID, item.GroupID, item.GroupOwned); PermissionMask pm = CogbotHelpers.PermMaskForWho(pw, item.Permissions); bool modify = Permissions.HasPermissions(pm, PermissionMask.Modify); bool cmt = Permissions.HasPermissions(pm, PermissionMask.Copy) || Permissions.HasPermissions(pm, PermissionMask.Modify) || Permissions.HasPermissions(pm, PermissionMask.Transfer); if (mustModify) { if (!modify) { Failure("ItemPerms NOMODIFY " + pm + " for " + pw + " on " + ItemDesc(item, exportPrim)); return(false); } } if (!cmt) { Failure("ItemPerms " + pm + " for " + pw + " on " + ItemDesc(item, exportPrim)); var p = exportPrim.Parent; if (p != null && p != exportPrim) { exportPrim = p; } lock (SIPrims) SIPrims.Add(exportPrim); return(false); } return(true); }
public static bool checkPerms(BotClient Client, SimObject exportPrim, OutputDelegate Failure, bool mustModify) { if (exportPrim != null) { var Properties = exportPrim.Properties; if (Properties == null) { Client.Objects.RequestObjectPropertiesFamily(exportPrim.GetSimulator(), exportPrim.ID, true); Failure("No props yet for " + named(exportPrim)); return(false); } // Check for export permission first //GotPermissions = false; // //if (!GotPermissions) // { // Properties = exportPrim.Properties ?? new Primitive.ObjectProperties(); //} // GotPermissionsEvent.WaitOne(1000 * 10, false); if (Properties.OwnerID != Client.Self.AgentID && Properties.OwnerID != Client.MasterKey && Properties.GroupID != Client.Self.ActiveGroup) { Failure("That object is owned by " + Properties.OwnerID + ", we don't have permission " + "to export " + named(exportPrim)); } SimAvatarClient theAvatar = Client.TheSimAvatar; PermissionWho pw = theAvatar.EffectivePermissionWho(exportPrim); PermissionMask pm = theAvatar.EffectivePermissionsMask(exportPrim); bool modify = Permissions.HasPermissions(pm, PermissionMask.Modify); bool cmt = Permissions.HasPermissions(pm, PermissionMask.Copy) || Permissions.HasPermissions(pm, PermissionMask.Modify) || Permissions.HasPermissions(pm, PermissionMask.Transfer); if (mustModify) { if (!modify) { Failure("ObjPerms NOMODIFY " + pm + " for " + pw + " on " + named(exportPrim)); return(false); } } if (!cmt) { Failure("ObjPerms " + pm + " for " + pw + " on " + named(exportPrim)); return(false); } //List<SimObject> family = new List<SimObject>(); //family.Add(exportPrim); //family.AddRange(exportPrim.Children); /*bool complete = RequestObjectProperties(family, 250, exportPrim.GetSimulator()); * exportedPrims.AddRange(family); * * if (!complete) * { * Logger.Log("Warning: Unable to retrieve full properties for:", Helpers.LogLevel.Warning, Client); * foreach (UUID uuid in PrimsWaiting.Keys) * Logger.Log(uuid.ToString(), Helpers.LogLevel.Warning, Client); * } * return true;*/ } return(true); }