parent
161a205c6d
commit
016eae5bbb
@ -1,92 +0,0 @@
|
||||
From f2e0818bc97bfbeba83f6abbb07909a8debcad77 Mon Sep 17 00:00:00 2001
|
||||
From: Pradeep Kilambi <pkilambi@cisco.com>
|
||||
Date: Thu, 9 May 2013 09:29:02 -0700
|
||||
Subject: [PATCH] Allow secure user password update.
|
||||
|
||||
This patch allows the ability for user password to be updated via
|
||||
a command prompt so the password doesnt show up in the bash history.
|
||||
The prompted password is asked twice to verify the match.
|
||||
If user cntl-D's the prompt a message appears suggesting user to use
|
||||
either of the options to update the password.
|
||||
|
||||
Fixes: bug#938315
|
||||
|
||||
Change-Id: I4271ae569b922f33c34f9b015a7ee6f760414e39
|
||||
---
|
||||
keystoneclient/utils.py | 23 ++++++++++++++++++++++-
|
||||
keystoneclient/v2_0/shell.py | 10 ++++++++--
|
||||
2 files changed, 30 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/keystoneclient/utils.py b/keystoneclient/utils.py
|
||||
index 3d708ca..f45ec34 100644
|
||||
--- a/keystoneclient/utils.py
|
||||
+++ b/keystoneclient/utils.py
|
||||
@@ -1,5 +1,7 @@
|
||||
-import uuid
|
||||
+import getpass
|
||||
import hashlib
|
||||
+import sys
|
||||
+import uuid
|
||||
|
||||
import prettytable
|
||||
|
||||
@@ -128,3 +130,22 @@ def hash_signed_token(signed_text):
|
||||
hash_ = hashlib.md5()
|
||||
hash_.update(signed_text)
|
||||
return hash_.hexdigest()
|
||||
+
|
||||
+
|
||||
+def prompt_for_password():
|
||||
+ """
|
||||
+ Prompt user for password if not provided so the password
|
||||
+ doesn't show up in the bash history.
|
||||
+ """
|
||||
+ if not (hasattr(sys.stdin, 'isatty') and sys.stdin.isatty()):
|
||||
+ # nothing to do
|
||||
+ return
|
||||
+
|
||||
+ while True:
|
||||
+ try:
|
||||
+ new_passwd = getpass.getpass('New Password: ')
|
||||
+ rep_passwd = getpass.getpass('Repeat New Password: ')
|
||||
+ if new_passwd == rep_passwd:
|
||||
+ return new_passwd
|
||||
+ except EOFError:
|
||||
+ return
|
||||
diff --git a/keystoneclient/v2_0/shell.py b/keystoneclient/v2_0/shell.py
|
||||
index 4c53cf7..0c7c233 100755
|
||||
--- a/keystoneclient/v2_0/shell.py
|
||||
+++ b/keystoneclient/v2_0/shell.py
|
||||
@@ -17,6 +17,7 @@
|
||||
|
||||
import argparse
|
||||
import getpass
|
||||
+import sys
|
||||
|
||||
from keystoneclient.v2_0 import client
|
||||
from keystoneclient import utils
|
||||
@@ -103,14 +104,19 @@ def do_user_update(kc, args):
|
||||
print 'Unable to update user: %s' % e
|
||||
|
||||
|
||||
-@utils.arg('--pass', metavar='<password>', dest='passwd', required=True,
|
||||
+@utils.arg('--pass', metavar='<password>', dest='passwd', required=False,
|
||||
help='Desired new password')
|
||||
@utils.arg('user', metavar='<user>',
|
||||
help='Name or ID of user to update password')
|
||||
def do_user_password_update(kc, args):
|
||||
"""Update user password"""
|
||||
user = utils.find_resource(kc.users, args.user)
|
||||
- kc.users.update_password(user, args.passwd)
|
||||
+ new_passwd = args.passwd or utils.prompt_for_password()
|
||||
+ if new_passwd is None:
|
||||
+ msg = ("\nPlease specify password using the --pass option "
|
||||
+ "or using the prompt")
|
||||
+ sys.exit(msg)
|
||||
+ kc.users.update_password(user, new_passwd)
|
||||
|
||||
|
||||
@utils.arg('--current-password', metavar='<current-password>',
|
||||
--
|
||||
1.8.1.5
|
||||
|
@ -1,49 +0,0 @@
|
||||
From 1736e2ffb12f70eeebed019448bc14def48aa036 Mon Sep 17 00:00:00 2001
|
||||
From: Dolph Mathews <dolph.mathews@gmail.com>
|
||||
Date: Wed, 8 May 2013 10:49:20 -0500
|
||||
Subject: [PATCH] Securely create signing_dir (bug 1174608)
|
||||
|
||||
Also verifies the security of an existing signing_dir.
|
||||
|
||||
Change-Id: I0685b4274a94ad3974a2b2a7ab3f45830d3934bb
|
||||
---
|
||||
keystoneclient/middleware/auth_token.py | 23 ++++++++++++++---------
|
||||
1 file changed, 14 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/keystoneclient/middleware/auth_token.py b/keystoneclient/middleware/auth_token.py
|
||||
index 0d0e124..e6cf99f 100644
|
||||
--- a/keystoneclient/middleware/auth_token.py
|
||||
+++ b/keystoneclient/middleware/auth_token.py
|
||||
@@ -296,15 +296,20 @@ class AuthProtocol(object):
|
||||
self.signing_dirname = self._conf_get('signing_dir')
|
||||
self.LOG.info('Using %s as cache directory for signing certificate' %
|
||||
self.signing_dirname)
|
||||
- if (os.path.exists(self.signing_dirname) and
|
||||
- not os.access(self.signing_dirname, os.W_OK)):
|
||||
- raise ConfigurationError("unable to access signing dir %s" %
|
||||
- self.signing_dirname)
|
||||
-
|
||||
- if not os.path.exists(self.signing_dirname):
|
||||
- os.makedirs(self.signing_dirname)
|
||||
- #will throw IOError if it cannot change permissions
|
||||
- os.chmod(self.signing_dirname, stat.S_IRWXU)
|
||||
+ if os.path.exists(self.signing_dirname):
|
||||
+ if not os.access(self.signing_dirname, os.W_OK):
|
||||
+ raise ConfigurationError(
|
||||
+ 'unable to access signing_dir %s' % self.signing_dirname)
|
||||
+ if os.stat(self.signing_dirname).st_uid != os.getuid():
|
||||
+ self.LOG.warning(
|
||||
+ 'signing_dir is not owned by %s' % os.getlogin())
|
||||
+ current_mode = stat.S_IMODE(os.stat(self.signing_dirname).st_mode)
|
||||
+ if current_mode != stat.S_IRWXU:
|
||||
+ self.LOG.warning(
|
||||
+ 'signing_dir mode is %s instead of %s' %
|
||||
+ (oct(current_mode), oct(stat.S_IRWXU)))
|
||||
+ else:
|
||||
+ os.makedirs(self.signing_dirname, stat.S_IRWXU)
|
||||
|
||||
val = '%s/signing_cert.pem' % self.signing_dirname
|
||||
self.signing_cert_file_name = val
|
||||
--
|
||||
1.8.1.5
|
||||
|
@ -1,47 +0,0 @@
|
||||
From 03012e641d6c2a98fbfe3780102e28a65d11a887 Mon Sep 17 00:00:00 2001
|
||||
From: Dolph Mathews <dolph.mathews@gmail.com>
|
||||
Date: Fri, 17 May 2013 10:38:25 -0500
|
||||
Subject: [PATCH] Default signing_dir to secure temp dir (bug 1181157)
|
||||
|
||||
Change-Id: I1a29f50b07a60de3d0519bf40074dbea92fa8656
|
||||
---
|
||||
keystoneclient/middleware/auth_token.py | 8 +++++---
|
||||
1 file changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/keystoneclient/middleware/auth_token.py b/keystoneclient/middleware/auth_token.py
|
||||
index e6cf99f..befa79e 100644
|
||||
--- a/keystoneclient/middleware/auth_token.py
|
||||
+++ b/keystoneclient/middleware/auth_token.py
|
||||
@@ -150,6 +150,7 @@ import json
|
||||
import logging
|
||||
import os
|
||||
import stat
|
||||
+import tempfile
|
||||
import time
|
||||
import urllib
|
||||
import webob.exc
|
||||
@@ -211,8 +212,7 @@ opts = [
|
||||
cfg.StrOpt('cache', default=None), # env key for the swift cache
|
||||
cfg.StrOpt('certfile'),
|
||||
cfg.StrOpt('keyfile'),
|
||||
- cfg.StrOpt('signing_dir',
|
||||
- default=os.path.expanduser('~/keystone-signing')),
|
||||
+ cfg.StrOpt('signing_dir'),
|
||||
cfg.ListOpt('memcache_servers'),
|
||||
cfg.IntOpt('token_cache_time', default=300),
|
||||
cfg.IntOpt('revocation_cache_time', default=1),
|
||||
@@ -292,8 +292,10 @@ class AuthProtocol(object):
|
||||
self.cert_file = self._conf_get('certfile')
|
||||
self.key_file = self._conf_get('keyfile')
|
||||
|
||||
- #signing
|
||||
+ # signing
|
||||
self.signing_dirname = self._conf_get('signing_dir')
|
||||
+ if self.signing_dirname is None:
|
||||
+ self.signing_dirname = tempfile.mkdtemp(prefix='keystone-signing-')
|
||||
self.LOG.info('Using %s as cache directory for signing certificate' %
|
||||
self.signing_dirname)
|
||||
if os.path.exists(self.signing_dirname):
|
||||
--
|
||||
1.8.1.5
|
||||
|
@ -0,0 +1,745 @@
|
||||
From eeefb784f24c37d5f56a421e1ccc911cace9385e Mon Sep 17 00:00:00 2001
|
||||
From: "Bryan D. Payne" <bdpayne@acm.org>
|
||||
Date: Fri, 7 Jun 2013 09:34:25 -0700
|
||||
Subject: [PATCH] Fix memcache encryption middleware
|
||||
|
||||
This fixes lp1175367 and lp1175368 by redesigning the memcache crypt
|
||||
middleware to not do dangerous things. It is forward compatible, but
|
||||
will invalidate any existing ephemeral encrypted or signed memcache
|
||||
entries.
|
||||
|
||||
Change-Id: Ice8724949a48bfad3b8b7c41b5f50a18a9ad9f42
|
||||
Signed-off-by: Bryan D. Payne <bdpayne@acm.org>
|
||||
---
|
||||
doc/source/middlewarearchitecture.rst | 37 +++---
|
||||
keystoneclient/middleware/auth_token.py | 131 +++++++++---------
|
||||
keystoneclient/middleware/memcache_crypt.py | 197 +++++++++++++++++-----------
|
||||
tests/test_auth_token_middleware.py | 89 +++----------
|
||||
tests/test_memcache_crypt.py | 96 ++++++++------
|
||||
5 files changed, 277 insertions(+), 273 deletions(-)
|
||||
|
||||
diff --git a/doc/source/middlewarearchitecture.rst b/doc/source/middlewarearchitecture.rst
|
||||
index 803fbd9..894d40d 100644
|
||||
--- a/doc/source/middlewarearchitecture.rst
|
||||
+++ b/doc/source/middlewarearchitecture.rst
|
||||
@@ -1,5 +1,5 @@
|
||||
..
|
||||
- Copyright 2011-2012 OpenStack, LLC
|
||||
+ Copyright 2011-2013 OpenStack, LLC
|
||||
All Rights Reserved.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
@@ -188,7 +188,8 @@ Configuration Options
|
||||
the timeout when validating token by http).
|
||||
* ``auth_port``: (optional, default `35357`) the port used to validate tokens
|
||||
* ``auth_protocol``: (optional, default `https`)
|
||||
-* ``auth_uri``: (optional, defaults to `auth_protocol`://`auth_host`:`auth_port`)
|
||||
+* ``auth_uri``: (optional, defaults to
|
||||
+ `auth_protocol`://`auth_host`:`auth_port`)
|
||||
* ``certfile``: (required, if Keystone server requires client cert)
|
||||
* ``keyfile``: (required, if Keystone server requires client cert) This can be
|
||||
the same as the certfile if the certfile includes the private key.
|
||||
@@ -232,22 +233,24 @@ Memcache Protection
|
||||
===================
|
||||
|
||||
When using memcached, we are storing user tokens and token validation
|
||||
-information into the cache as raw data. Which means anyone who have access
|
||||
-to the memcache servers can read and modify data stored there. To mitigate
|
||||
-this risk, ``auth_token`` middleware provides an option to either encrypt
|
||||
-or authenticate the token data stored in the cache.
|
||||
-
|
||||
-* ``memcache_security_strategy``: (optional) if defined, indicate whether token
|
||||
- data should be encrypted or authenticated. Acceptable values are ``ENCRYPT``
|
||||
- or ``MAC``. If ``ENCRYPT``, token data is encrypted in the cache. If
|
||||
- ``MAC``, token data is authenticated (with HMAC) in the cache. If its value
|
||||
- is neither ``MAC`` nor ``ENCRYPT``, ``auth_token`` will raise an exception
|
||||
- on initialization.
|
||||
+information into the cache as raw data. Which means that anyone who
|
||||
+has access to the memcache servers can read and modify data stored
|
||||
+there. To mitigate this risk, ``auth_token`` middleware provides an
|
||||
+option to authenticate and optionally encrypt the token data stored in
|
||||
+the cache.
|
||||
+
|
||||
+* ``memcache_security_strategy``: (optional) if defined, indicate
|
||||
+ whether token data should be authenticated or authenticated and
|
||||
+ encrypted. Acceptable values are ``MAC`` or ``ENCRYPT``. If ``MAC``,
|
||||
+ token data is authenticated (with HMAC) in the cache. If
|
||||
+ ``ENCRYPT``, token data is encrypted and authenticated in the
|
||||
+ cache. If the value is not one of these options or empty,
|
||||
+ ``auth_token`` will raise an exception on initialization.
|
||||
* ``memcache_secret_key``: (optional, mandatory if
|
||||
- ``memcache_security_strategy`` is defined) if defined,
|
||||
- a random string to be used for key derivation. If
|
||||
- ``memcache_security_strategy`` is defined and ``memcache_secret_key`` is
|
||||
- absent, ``auth_token`` will raise an exception on initialization.
|
||||
+ ``memcache_security_strategy`` is defined) this string is used for
|
||||
+ key derivation. If ``memcache_security_strategy`` is defined and
|
||||
+ ``memcache_secret_key`` is absent, ``auth_token`` will raise an
|
||||
+ exception on initialization.
|
||||
|
||||
Exchanging User Information
|
||||
===========================
|
||||
diff --git a/keystoneclient/middleware/auth_token.py b/keystoneclient/middleware/auth_token.py
|
||||
index 7e3012c..e50f723 100644
|
||||
--- a/keystoneclient/middleware/auth_token.py
|
||||
+++ b/keystoneclient/middleware/auth_token.py
|
||||
@@ -222,6 +222,7 @@ opts = [
|
||||
CONF.register_opts(opts, group='keystone_authtoken')
|
||||
|
||||
LIST_OF_VERSIONS_TO_ATTEMPT = ['v2.0', 'v3.0']
|
||||
+CACHE_KEY_TEMPLATE = 'tokens/%s'
|
||||
|
||||
|
||||
def will_expire_soon(expiry):
|
||||
@@ -847,91 +848,81 @@ class AuthProtocol(object):
|
||||
env_key = self._header_to_env_var(key)
|
||||
return env.get(env_key, default)
|
||||
|
||||
- def _protect_cache_value(self, token, data):
|
||||
- """ Encrypt or sign data if necessary. """
|
||||
- try:
|
||||
- if self._memcache_security_strategy == 'ENCRYPT':
|
||||
- return memcache_crypt.encrypt_data(token,
|
||||
- self._memcache_secret_key,
|
||||
- data)
|
||||
- elif self._memcache_security_strategy == 'MAC':
|
||||
- return memcache_crypt.sign_data(token, data)
|
||||
- else:
|
||||
- return data
|
||||
- except:
|
||||
- msg = 'Failed to encrypt/sign cache data.'
|
||||
- self.LOG.exception(msg)
|
||||
- return data
|
||||
-
|
||||
- def _unprotect_cache_value(self, token, data):
|
||||
- """ Decrypt or verify signed data if necessary. """
|
||||
- if data is None:
|
||||
- return data
|
||||
-
|
||||
- try:
|
||||
- if self._memcache_security_strategy == 'ENCRYPT':
|
||||
- return memcache_crypt.decrypt_data(token,
|
||||
- self._memcache_secret_key,
|
||||
- data)
|
||||
- elif self._memcache_security_strategy == 'MAC':
|
||||
- return memcache_crypt.verify_signed_data(token, data)
|
||||
- else:
|
||||
- return data
|
||||
- except:
|
||||
- msg = 'Failed to decrypt/verify cache data.'
|
||||
- self.LOG.exception(msg)
|
||||
- # this should have the same effect as data not found in cache
|
||||
- return None
|
||||
-
|
||||
- def _get_cache_key(self, token):
|
||||
- """ Return the cache key.
|
||||
-
|
||||
- Do not use clear token as key if memcache protection is on.
|
||||
-
|
||||
- """
|
||||
- htoken = token
|
||||
- if self._memcache_security_strategy in ('ENCRYPT', 'MAC'):
|
||||
- derv_token = token + self._memcache_secret_key
|
||||
- htoken = memcache_crypt.hash_data(derv_token)
|
||||
- return 'tokens/%s' % htoken
|
||||
-
|
||||
- def _cache_get(self, token):
|
||||
+ def _cache_get(self, token, ignore_expires=False):
|
||||
"""Return token information from cache.
|
||||
|
||||
If token is invalid raise InvalidUserToken
|
||||
return token only if fresh (not expired).
|
||||
"""
|
||||
+
|
||||
if self._cache and token:
|
||||
- key = self._get_cache_key(token)
|
||||
- cached = self._cache.get(key)
|
||||
- cached = self._unprotect_cache_value(token, cached)
|
||||
+ if self._memcache_security_strategy is None:
|
||||
+ key = CACHE_KEY_TEMPLATE % token
|
||||
+ serialized = self._cache.get(key)
|
||||
+ else:
|
||||
+ keys = memcache_crypt.derive_keys(
|
||||
+ token,
|
||||
+ self._memcache_secret_key,
|
||||
+ self._memcache_security_strategy)
|
||||
+ cache_key = CACHE_KEY_TEMPLATE % (
|
||||
+ memcache_crypt.get_cache_key(keys))
|
||||
+ raw_cached = self._cache.get(cache_key)
|
||||
+ try:
|
||||
+ # unprotect_data will return None if raw_cached is None
|
||||
+ serialized = memcache_crypt.unprotect_data(keys,
|
||||
+ raw_cached)
|
||||
+ except Exception:
|
||||
+ msg = 'Failed to decrypt/verify cache data'
|
||||
+ self.LOG.exception(msg)
|
||||
+ # this should have the same effect as data not
|
||||
+ # found in cache
|
||||
+ serialized = None
|
||||
+
|
||||
+ if serialized is None:
|
||||
+ return None
|
||||
+
|
||||
+ # Note that 'invalid' and (data, expires) are the only
|
||||
+ # valid types of serialized cache entries, so there is not
|
||||
+ # a collision with json.loads(serialized) == None.
|
||||
+ cached = json.loads(serialized)
|
||||
if cached == 'invalid':
|
||||
self.LOG.debug('Cached Token %s is marked unauthorized', token)
|
||||
raise InvalidUserToken('Token authorization failed')
|
||||
- if cached:
|
||||
- data, expires = cached
|
||||
- if time.time() < float(expires):
|
||||
- self.LOG.debug('Returning cached token %s', token)
|
||||
- return data
|
||||
- else:
|
||||
- self.LOG.debug('Cached Token %s seems expired', token)
|
||||
-
|
||||
- def _cache_store(self, token, data, expires=None):
|
||||
- """ Store value into memcache. """
|
||||
- key = self._get_cache_key(token)
|
||||
- data = self._protect_cache_value(token, data)
|
||||
- data_to_store = data
|
||||
- if expires:
|
||||
- data_to_store = (data, expires)
|
||||
+
|
||||
+ data, expires = cached
|
||||
+ if ignore_expires or time.time() < float(expires):
|
||||
+ self.LOG.debug('Returning cached token %s', token)
|
||||
+ return data
|
||||
+ else:
|
||||
+ self.LOG.debug('Cached Token %s seems expired', token)
|
||||
+
|
||||
+ def _cache_store(self, token, data):
|
||||
+ """ Store value into memcache.
|
||||
+
|
||||
+ data may be the string 'invalid' or a tuple like (data, expires)
|
||||
+
|
||||
+ """
|
||||
+ serialized_data = json.dumps(data)
|
||||
+ if self._memcache_security_strategy is None:
|
||||
+ cache_key = CACHE_KEY_TEMPLATE % token
|
||||
+ data_to_store = serialized_data
|
||||
+ else:
|
||||
+ keys = memcache_crypt.derive_keys(
|
||||
+ token,
|
||||
+ self._memcache_secret_key,
|
||||
+ self._memcache_security_strategy)
|
||||
+ cache_key = CACHE_KEY_TEMPLATE % memcache_crypt.get_cache_key(keys)
|
||||
+ data_to_store = memcache_crypt.protect_data(keys, serialized_data)
|
||||
+
|
||||
# we need to special-case set() because of the incompatibility between
|
||||
# Swift MemcacheRing and python-memcached. See
|
||||
# https://bugs.launchpad.net/swift/+bug/1095730
|
||||
if self._use_keystone_cache:
|
||||
- self._cache.set(key,
|
||||
+ self._cache.set(cache_key,
|
||||
data_to_store,
|
||||
time=self.token_cache_time)
|
||||
else:
|
||||
- self._cache.set(key,
|
||||
+ self._cache.set(cache_key,
|
||||
data_to_store,
|
||||
timeout=self.token_cache_time)
|
||||
|
||||
@@ -959,7 +950,7 @@ class AuthProtocol(object):
|
||||
"""
|
||||
if self._cache:
|
||||
self.LOG.debug('Storing %s token in memcache', token)
|
||||
- self._cache_store(token, data, expires)
|
||||
+ self._cache_store(token, (data, expires))
|
||||
|
||||
def _cache_store_invalid(self, token):
|
||||
"""Store invalid token in cache."""
|
||||
diff --git a/keystoneclient/middleware/memcache_crypt.py b/keystoneclient/middleware/memcache_crypt.py
|
||||
index 91e261d..6cadf3a 100755
|
||||
--- a/keystoneclient/middleware/memcache_crypt.py
|
||||
+++ b/keystoneclient/middleware/memcache_crypt.py
|
||||
@@ -1,6 +1,6 @@
|
||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
|
||||
-# Copyright 2010-2012 OpenStack LLC
|
||||
+# Copyright 2010-2013 OpenStack LLC
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
@@ -18,33 +18,34 @@
|
||||
"""
|
||||
Utilities for memcache encryption and integrity check.
|
||||
|
||||
-Data is serialized before been encrypted or MACed. Encryption have a
|
||||
-dependency on the pycrypto. If pycrypto is not available,
|
||||
-CryptoUnabailableError will be raised.
|
||||
+Data should be serialized before entering these functions. Encryption
|
||||
+has a dependency on the pycrypto. If pycrypto is not available,
|
||||
+CryptoUnavailableError will be raised.
|
||||
|
||||
-Encrypted data stored in memcache are prefixed with '{ENCRYPT:AES256}'.
|
||||
-
|
||||
-MACed data stored in memcache are prefixed with '{MAC:SHA1}'.
|
||||
+This module will not be called unless signing or encryption is enabled
|
||||
+in the config. It will always validate signatures, and will decrypt
|
||||
+data if encryption is enabled. It is not valid to mix protection
|
||||
+modes.
|
||||
|
||||
"""
|
||||
|
||||
import base64
|
||||
import functools
|
||||
import hashlib
|
||||
-import json
|
||||
+import hmac
|
||||
+import math
|
||||
import os
|
||||
|
||||
-# make sure pycrypt is available
|
||||
+# make sure pycrypto is available
|
||||
try:
|
||||
from Crypto.Cipher import AES
|
||||
except ImportError:
|
||||
AES = None
|
||||
|
||||
-
|
||||
-# prefix marker indicating data is HMACed (signed by a secret key)
|
||||
-MAC_MARKER = '{MAC:SHA1}'
|
||||
-# prefix marker indicating data is encrypted
|
||||
-ENCRYPT_MARKER = '{ENCRYPT:AES256}'
|
||||
+HASH_FUNCTION = hashlib.sha384
|
||||
+DIGEST_LENGTH = HASH_FUNCTION().digest_size
|
||||
+DIGEST_SPLIT = DIGEST_LENGTH // 3
|
||||
+DIGEST_LENGTH_B64 = 4 * int(math.ceil(DIGEST_LENGTH / 3.0))
|
||||
|
||||
|
||||
class InvalidMacError(Exception):
|
||||
@@ -81,77 +82,121 @@ def assert_crypto_availability(f):
|
||||
return wrapper
|
||||
|
||||
|
||||
-def generate_aes_key(token, secret):
|
||||
- """ Generates and returns a 256 bit AES key, based on sha256 hash. """
|
||||
- return hashlib.sha256(token + secret).digest()
|
||||
-
|
||||
-
|
||||
-def compute_mac(token, serialized_data):
|
||||
- """ Computes and returns the base64 encoded MAC. """
|
||||
- return hash_data(serialized_data + token)
|
||||
+def constant_time_compare(first, second):
|
||||
+ """ Returns True if both string inputs are equal, otherwise False
|
||||
|
||||
+ This function should take a constant amount of time regardless of
|
||||
+ how many characters in the strings match.
|
||||
|
||||
-def hash_data(data):
|
||||
- """ Return the base64 encoded SHA1 hash of the data. """
|
||||
- return base64.b64encode(hashlib.sha1(data).digest())
|
||||
-
|
||||
-
|
||||
-def sign_data(token, data):
|
||||
- """ MAC the data using SHA1. """
|
||||
- mac_data = {}
|
||||
- mac_data['serialized_data'] = json.dumps(data)
|
||||
- mac = compute_mac(token, mac_data['serialized_data'])
|
||||
- mac_data['mac'] = mac
|
||||
- md = MAC_MARKER + base64.b64encode(json.dumps(mac_data))
|
||||
- return md
|
||||
+ """
|
||||
+ if len(first) != len(second):
|
||||
+ return False
|
||||
+ result = 0
|
||||
+ for x, y in zip(first, second):
|
||||
+ result |= ord(x) ^ ord(y)
|
||||
+ return result == 0
|
||||
+
|
||||
+
|
||||
+def derive_keys(token, secret, strategy):
|
||||
+ """ Derives keys for MAC and ENCRYPTION from the user-provided
|
||||
+ secret. The resulting keys should be passed to the protect and
|
||||
+ unprotect functions.
|
||||
+
|
||||
+ As suggested by NIST Special Publication 800-108, this uses the
|
||||
+ first 128 bits from the sha384 KDF for the obscured cache key
|
||||
+ value, the second 128 bits for the message authentication key and
|
||||
+ the remaining 128 bits for the encryption key.
|
||||
+
|
||||
+ This approach is faster than computing a separate hmac as the KDF
|
||||
+ for each desired key.
|
||||
+ """
|
||||
+ digest = hmac.new(secret, token + strategy, HASH_FUNCTION).digest()
|
||||
+ return {'CACHE_KEY': digest[:DIGEST_SPLIT],
|
||||
+ 'MAC': digest[DIGEST_SPLIT: 2 * DIGEST_SPLIT],
|
||||
+ 'ENCRYPTION': digest[2 * DIGEST_SPLIT:],
|
||||
+ 'strategy': strategy}
|
||||
|
||||
|
||||
-def verify_signed_data(token, data):
|
||||
- """ Verify data integrity by ensuring MAC is valid. """
|
||||
- if data.startswith(MAC_MARKER):
|
||||
- try:
|
||||
- data = data[len(MAC_MARKER):]
|
||||
- mac_data = json.loads(base64.b64decode(data))
|
||||
- mac = compute_mac(token, mac_data['serialized_data'])
|
||||
- if mac != mac_data['mac']:
|
||||
- raise InvalidMacError('invalid MAC; expect=%s, actual=%s' %
|
||||
- (mac_data['mac'], mac))
|
||||
- return json.loads(mac_data['serialized_data'])
|
||||
- except:
|
||||
- raise InvalidMacError('invalid MAC; data appeared to be corrupted')
|
||||
- else:
|
||||
- # doesn't appear to be MACed data
|
||||
- return data
|
||||
+def sign_data(key, data):
|
||||
+ """ Sign the data using the defined function and the derived key"""
|
||||
+ mac = hmac.new(key, data, HASH_FUNCTION).digest()
|
||||
+ return base64.b64encode(mac)
|
||||
|
||||
|
||||
@assert_crypto_availability
|
||||
-def encrypt_data(token, secret, data):
|
||||
- """ Encryptes the data with the given secret key. """
|
||||
+def encrypt_data(key, data):
|
||||
+ """ Encrypt the data with the given secret key.
|
||||
+
|
||||
+ Padding is n bytes of the value n, where 1 <= n <= blocksize.
|
||||
+ """
|
||||
iv = os.urandom(16)
|
||||
- aes_key = generate_aes_key(token, secret)
|
||||
- cipher = AES.new(aes_key, AES.MODE_CFB, iv)
|
||||
- data = json.dumps(data)
|
||||
- encoded_data = base64.b64encode(iv + cipher.encrypt(data))
|
||||
- encoded_data = ENCRYPT_MARKER + encoded_data
|
||||
- return encoded_data
|
||||
+ cipher = AES.new(key, AES.MODE_CBC, iv)
|
||||
+ padding = 16 - len(data) % 16
|
||||
+ return iv + cipher.encrypt(data + chr(padding) * padding)
|
||||
|
||||
|
||||
@assert_crypto_availability
|
||||
-def decrypt_data(token, secret, data):
|
||||
+def decrypt_data(key, data):
|
||||
""" Decrypt the data with the given secret key. """
|
||||
- if data.startswith(ENCRYPT_MARKER):
|
||||
- try:
|
||||
- # encrypted data
|
||||
- encoded_data = data[len(ENCRYPT_MARKER):]
|
||||
- aes_key = generate_aes_key(token, secret)
|
||||
- decoded_data = base64.b64decode(encoded_data)
|
||||
- iv = decoded_data[:16]
|
||||
- encrypted_data = decoded_data[16:]
|
||||
- cipher = AES.new(aes_key, AES.MODE_CFB, iv)
|
||||
- decrypted_data = cipher.decrypt(encrypted_data)
|
||||
- return json.loads(decrypted_data)
|
||||
- except:
|
||||
- raise DecryptError('data appeared to be corrupted')
|
||||
- else:
|
||||
- # doesn't appear to be encrypted data
|
||||
- return data
|
||||
+ iv = data[:16]
|
||||
+ cipher = AES.new(key, AES.MODE_CBC, iv)
|
||||
+ try:
|
||||
+ result = cipher.decrypt(data[16:])
|
||||
+ except Exception:
|
||||
+ raise DecryptError('Encrypted data appears to be corrupted.')
|
||||
+
|
||||
+ # Strip the last n padding bytes where n is the last value in
|
||||
+ # the plaintext
|
||||
+ padding = ord(result[-1])
|
||||
+ return result[:-1 * padding]
|
||||
+
|
||||
+
|
||||
+def protect_data(keys, data):
|
||||
+ """ Given keys and serialized data, returns an appropriately
|
||||
+ protected string suitable for storage in the cache.
|
||||
+
|
||||
+ """
|
||||
+ if keys['strategy'] == 'ENCRYPT':
|
||||
+ data = encrypt_data(keys['ENCRYPTION'], data)
|
||||
+
|
||||
+ encoded_data = base64.b64encode(data)
|
||||
+
|
||||
+ signature = sign_data(keys['MAC'], encoded_data)
|
||||
+ return signature + encoded_data
|
||||
+
|
||||
+
|
||||
+def unprotect_data(keys, signed_data):
|
||||
+ """ Given keys and cached string data, verifies the signature,
|
||||
+ decrypts if necessary, and returns the original serialized data.
|
||||
+
|
||||
+ """
|
||||
+ # cache backends return None when no data is found. We don't mind
|
||||
+ # that this particular special value is unsigned.
|
||||
+ if signed_data is None:
|
||||
+ return None
|
||||
+
|
||||
+ # First we calculate the signature
|
||||
+ provided_mac = signed_data[:DIGEST_LENGTH_B64]
|
||||
+ calculated_mac = sign_data(
|
||||
+ keys['MAC'],
|
||||
+ signed_data[DIGEST_LENGTH_B64:])
|
||||
+
|
||||
+ # Then verify that it matches the provided value
|
||||
+ if not constant_time_compare(provided_mac, calculated_mac):
|
||||
+ raise InvalidMacError('Invalid MAC; data appears to be corrupted.')
|
||||
+
|
||||
+ data = base64.b64decode(signed_data[DIGEST_LENGTH_B64:])
|
||||
+
|
||||
+ # then if necessary decrypt the data
|
||||
+ if keys['strategy'] == 'ENCRYPT':
|
||||
+ data = decrypt_data(keys['ENCRYPTION'], data)
|
||||
+
|
||||
+ return data
|
||||
+
|
||||
+
|
||||
+def get_cache_key(keys):
|
||||
+ """ Given keys generated by derive_keys(), returns a base64
|
||||
+ encoded value suitable for use as a cache key in memcached.
|
||||
+
|
||||
+ """
|
||||
+ return base64.b64encode(keys['CACHE_KEY'])
|
||||
diff --git a/tests/test_auth_token_middleware.py b/tests/test_auth_token_middleware.py
|
||||
index 06054d0..a428504 100644
|
||||
--- a/tests/test_auth_token_middleware.py
|
||||
+++ b/tests/test_auth_token_middleware.py
|
||||
@@ -28,7 +28,6 @@ import webob
|
||||
from keystoneclient.common import cms
|
||||
from keystoneclient import utils
|
||||
from keystoneclient.middleware import auth_token
|
||||
-from keystoneclient.middleware import memcache_crypt
|
||||
from keystoneclient.openstack.common import memorycache
|
||||
from keystoneclient.openstack.common import jsonutils
|
||||
from keystoneclient.openstack.common import timeutils
|
||||
@@ -1013,9 +1012,7 @@ class AuthTokenMiddlewareTest(BaseAuthTokenMiddlewareTest):
|
||||
def _get_cached_token(self, token):
|
||||
token_id = cms.cms_hash_token(token)
|
||||
# NOTE(vish): example tokens are expired so skip the expiration check.
|
||||
- key = self.middleware._get_cache_key(token_id)
|
||||
- cached = self.middleware._cache.get(key)
|
||||
- return self.middleware._unprotect_cache_value(token, cached)
|
||||
+ return self.middleware._cache_get(token_id, ignore_expires=True)
|
||||
|
||||
def test_memcache(self):
|
||||
req = webob.Request.blank('/')
|
||||
@@ -1036,7 +1033,8 @@ class AuthTokenMiddlewareTest(BaseAuthTokenMiddlewareTest):
|
||||
token = 'invalid-token'
|
||||
req.headers['X-Auth-Token'] = token
|
||||
self.middleware(req.environ, self.start_fake_response)
|
||||
- self.assertEqual(self._get_cached_token(token), "invalid")
|
||||
+ self.assertRaises(auth_token.InvalidUserToken,
|
||||
+ self._get_cached_token, token)
|
||||
|
||||
def test_memcache_set_expired(self):
|
||||
token_cache_time = 10
|
||||
@@ -1096,18 +1094,11 @@ class AuthTokenMiddlewareTest(BaseAuthTokenMiddlewareTest):
|
||||
'memcache_secret_key': 'mysecret'
|
||||
}
|
||||
self.set_middleware(conf=conf)
|
||||
- encrypted_data = self.middleware._protect_cache_value(
|
||||
- 'token', TOKEN_RESPONSES[self.token_dict['uuid_token_default']])
|
||||
- self.assertEqual('{ENCRYPT:AES256}', encrypted_data[:16])
|
||||
- self.assertEqual(
|
||||
- TOKEN_RESPONSES[self.token_dict['uuid_token_default']],
|
||||
- self.middleware._unprotect_cache_value('token', encrypted_data))
|
||||
- # should return None if unable to decrypt
|
||||
- self.assertIsNone(
|
||||
- self.middleware._unprotect_cache_value(
|
||||
- 'token', '{ENCRYPT:AES256}corrupted'))
|
||||
- self.assertIsNone(
|
||||
- self.middleware._unprotect_cache_value('mykey', encrypted_data))
|
||||
+ token = 'my_token'
|
||||
+ data = ('this_data', 10e100)
|
||||
+ self.middleware._init_cache({})
|
||||
+ self.middleware._cache_store(token, data)
|
||||
+ self.assertEqual(self.middleware._cache_get(token), data[0])
|
||||
|
||||
def test_sign_cache_data(self):
|
||||
conf = {
|
||||
@@ -1119,19 +1110,11 @@ class AuthTokenMiddlewareTest(BaseAuthTokenMiddlewareTest):
|
||||
'memcache_secret_key': 'mysecret'
|
||||
}
|
||||
self.set_middleware(conf=conf)
|
||||
- signed_data = self.middleware._protect_cache_value(
|
||||
- 'mykey', TOKEN_RESPONSES[self.token_dict['uuid_token_default']])
|
||||
- expected = '{MAC:SHA1}'
|
||||
- self.assertEqual(
|
||||
- signed_data[:10],
|
||||
- expected)
|
||||
- self.assertEqual(
|
||||
- TOKEN_RESPONSES[self.token_dict['uuid_token_default']],
|
||||
- self.middleware._unprotect_cache_value('mykey', signed_data))
|
||||
- # should return None on corrupted data
|
||||
- self.assertIsNone(
|
||||
- self.middleware._unprotect_cache_value('mykey',
|
||||
- '{MAC:SHA1}corrupted'))
|
||||
+ token = 'my_token'
|
||||
+ data = ('this_data', 10e100)
|
||||
+ self.middleware._init_cache({})
|
||||
+ self.middleware._cache_store(token, data)
|
||||
+ self.assertEqual(self.middleware._cache_get(token), data[0])
|
||||
|
||||
def test_no_memcache_protection(self):
|
||||
conf = {
|
||||
@@ -1142,47 +1125,11 @@ class AuthTokenMiddlewareTest(BaseAuthTokenMiddlewareTest):
|
||||
'memcache_secret_key': 'mysecret'
|
||||
}
|
||||
self.set_middleware(conf=conf)
|
||||
- data = self.middleware._protect_cache_value('mykey',
|
||||
- 'This is a test!')
|
||||
- self.assertEqual(data, 'This is a test!')
|
||||
- self.assertEqual(
|
||||
- 'This is a test!',
|
||||
- self.middleware._unprotect_cache_value('mykey', data))
|
||||
-
|
||||
- def test_get_cache_key(self):
|
||||
- conf = {
|
||||
- 'auth_host': 'keystone.example.com',
|
||||
- 'auth_port': 1234,
|
||||
- 'auth_admin_prefix': '/testadmin',
|
||||
- 'memcache_servers': ['localhost:11211'],
|
||||
- 'memcache_secret_key': 'mysecret'
|
||||
- }
|
||||
- self.set_middleware(conf=conf)
|
||||
- self.assertEqual(
|
||||
- 'tokens/mytoken',
|
||||
- self.middleware._get_cache_key('mytoken'))
|
||||
- conf = {
|
||||
- 'auth_host': 'keystone.example.com',
|
||||
- 'auth_port': 1234,
|
||||
- 'auth_admin_prefix': '/testadmin',
|
||||
- 'memcache_servers': ['localhost:11211'],
|
||||
- 'memcache_security_strategy': 'mac',
|
||||
- 'memcache_secret_key': 'mysecret'
|
||||
- }
|
||||
- self.set_middleware(conf=conf)
|
||||
- expected = 'tokens/' + memcache_crypt.hash_data('mytoken' + 'mysecret')
|
||||
- self.assertEqual(self.middleware._get_cache_key('mytoken'), expected)
|
||||
- conf = {
|
||||
- 'auth_host': 'keystone.example.com',
|
||||
- 'auth_port': 1234,
|
||||
- 'auth_admin_prefix': '/testadmin',
|
||||
- 'memcache_servers': ['localhost:11211'],
|
||||
- 'memcache_security_strategy': 'Encrypt',
|
||||
- 'memcache_secret_key': 'abc!'
|
||||
- }
|
||||
- self.set_middleware(conf=conf)
|
||||
- expected = 'tokens/' + memcache_crypt.hash_data('mytoken' + 'abc!')
|
||||
- self.assertEqual(self.middleware._get_cache_key('mytoken'), expected)
|
||||
+ token = 'my_token'
|
||||
+ data = ('this_data', 10e100)
|
||||
+ self.middleware._init_cache({})
|
||||
+ self.middleware._cache_store(token, data)
|
||||
+ self.assertEqual(self.middleware._cache_get(token), data[0])
|
||||
|
||||
def test_assert_valid_memcache_protection_config(self):
|
||||
# test missing memcache_secret_key
|
||||
diff --git a/tests/test_memcache_crypt.py b/tests/test_memcache_crypt.py
|
||||
index b2281d9..524cd21 100644
|
||||
--- a/tests/test_memcache_crypt.py
|
||||
+++ b/tests/test_memcache_crypt.py
|
||||
@@ -4,48 +4,66 @@ from keystoneclient.middleware import memcache_crypt
|
||||
|
||||
|
||||
class MemcacheCryptPositiveTests(testtools.TestCase):
|
||||
- def test_generate_aes_key(self):
|
||||
- self.assertEqual(
|
||||
- len(memcache_crypt.generate_aes_key('Gimme Da Key', 'hush')), 32)
|
||||
+ def _setup_keys(self, strategy):
|
||||
+ return memcache_crypt.derive_keys('token', 'secret', strategy)
|
||||
|
||||
- def test_compute_mac(self):
|
||||
- self.assertEqual(
|
||||
- memcache_crypt.compute_mac('mykey', 'This is a test!'),
|
||||
- 'tREu41yR5tEgeBWIuv9ag4AeKA8=')
|
||||
+ def test_constant_time_compare(self):
|
||||
+ # make sure it works as a compare, the "constant time" aspect
|
||||
+ # isn't appropriate to test in unittests
|
||||
+ ctc = memcache_crypt.constant_time_compare
|
||||
+ self.assertTrue(ctc('abcd', 'abcd'))
|
||||
+ self.assertTrue(ctc('', ''))
|
||||
+ self.assertFalse(ctc('abcd', 'efgh'))
|
||||
+ self.assertFalse(ctc('abc', 'abcd'))
|
||||
+ self.assertFalse(ctc('abc', 'abc\x00'))
|
||||
+ self.assertFalse(ctc('', 'abc'))
|
||||
+
|
||||
+ def test_derive_keys(self):
|
||||
+ keys = memcache_crypt.derive_keys('token', 'secret', 'strategy')
|
||||
+ self.assertEqual(len(keys['ENCRYPTION']),
|
||||
+ len(keys['CACHE_KEY']))
|
||||
+ self.assertEqual(len(keys['CACHE_KEY']),
|
||||
+ len(keys['MAC']))
|
||||
+ self.assertNotEqual(keys['ENCRYPTION'],
|
||||
+ keys['MAC'])
|
||||
+ self.assertIn('strategy', keys.keys())
|
||||
+
|
||||
+ def test_key_strategy_diff(self):
|
||||
+ k1 = self._setup_keys('MAC')
|
||||
+ k2 = self._setup_keys('ENCRYPT')
|
||||
+ self.assertNotEqual(k1, k2)
|
||||
|
||||
def test_sign_data(self):
|
||||
- expected = '{MAC:SHA1}eyJtYWMiOiAiM0FrQmdPZHRybGo1RFFESHA1eUxqcDVq' +\
|
||||
- 'Si9BPSIsICJzZXJpYWxpemVkX2RhdGEiOiAiXCJUaGlzIGlzIGEgdG' +\
|
||||
- 'VzdCFcIiJ9'
|
||||
- self.assertEqual(
|
||||
- memcache_crypt.sign_data('mykey', 'This is a test!'),
|
||||
- expected)
|
||||
-
|
||||
- def test_verify_signed_data(self):
|
||||
- signed = memcache_crypt.sign_data('mykey', 'Testz')
|
||||
- self.assertEqual(
|
||||
- memcache_crypt.verify_signed_data('mykey', signed),
|
||||
- 'Testz')
|
||||
- self.assertEqual(
|
||||
- memcache_crypt.verify_signed_data('aasSFWE13WER', 'not MACed'),
|
||||
- 'not MACed')
|
||||
-
|
||||
- def test_encrypt_data(self):
|
||||
- expected = '{ENCRYPT:AES256}'
|
||||
- self.assertEqual(
|
||||
- memcache_crypt.encrypt_data('mykey', 'mysecret',
|
||||
- 'This is a test!')[:16],
|
||||
- expected)
|
||||
-
|
||||
- def test_decrypt_data(self):
|
||||
- encrypted = memcache_crypt.encrypt_data('mykey', 'mysecret', 'Testz')
|
||||
- self.assertEqual(
|
||||
- memcache_crypt.decrypt_data('mykey', 'mysecret', encrypted),
|
||||
- 'Testz')
|
||||
- self.assertEqual(
|
||||
- memcache_crypt.decrypt_data('mykey', 'mysecret',
|
||||
- 'Not Encrypted!'),
|
||||
- 'Not Encrypted!')
|
||||
+ keys = self._setup_keys('MAC')
|
||||
+ sig = memcache_crypt.sign_data(keys['MAC'], 'data')
|
||||
+ self.assertEqual(len(sig), memcache_crypt.DIGEST_LENGTH_B64)
|
||||
+
|
||||
+ def test_encryption(self):
|
||||
+ keys = self._setup_keys('ENCRYPT')
|
||||
+ # what you put in is what you get out
|
||||
+ for data in ['data', '1234567890123456', '\x00\xFF' * 13
|
||||
+ ] + [chr(x % 256) * x for x in range(768)]:
|
||||
+ crypt = memcache_crypt.encrypt_data(keys['ENCRYPTION'], data)
|
||||
+ decrypt = memcache_crypt.decrypt_data(keys['ENCRYPTION'], crypt)
|
||||
+ self.assertEqual(data, decrypt)
|
||||
+ self.assertRaises(memcache_crypt.DecryptError,
|
||||
+ memcache_crypt.decrypt_data,
|
||||
+ keys['ENCRYPTION'], crypt[:-1])
|
||||
+
|
||||
+ def test_protect_wrappers(self):
|
||||
+ data = 'My Pretty Little Data'
|
||||
+ for strategy in ['MAC', 'ENCRYPT']:
|
||||
+ keys = self._setup_keys(strategy)
|
||||
+ protected = memcache_crypt.protect_data(keys, data)
|
||||
+ self.assertNotEqual(protected, data)
|
||||
+ if strategy == 'ENCRYPT':
|
||||
+ self.assertNotIn(data, protected)
|
||||
+ unprotected = memcache_crypt.unprotect_data(keys, protected)
|
||||
+ self.assertEqual(data, unprotected)
|
||||
+ self.assertRaises(memcache_crypt.InvalidMacError,
|
||||
+ memcache_crypt.unprotect_data,
|
||||
+ keys, protected[:-1])
|
||||
+ self.assertIsNone(memcache_crypt.unprotect_data(keys, None))
|
||||
|
||||
def test_no_pycrypt(self):
|
||||
aes = memcache_crypt.AES
|
||||
--
|
||||
1.8.1.5
|
||||
|
@ -1,2 +1,3 @@
|
||||
DIST mingw-w64-v2.0.1.tar.gz 7006630 SHA256 3ccc86990e1ce4680dda61db3b88567f21bf91edc5fe0c26aa9e3cc7b64786c7 SHA512 adcf76b64308ac6f22d52155ce2cf4aa27acc5466bfd54b2615cb680b11648a9f7b90c0a12b8cf5cfa958daf28f1d73d892798aacee98d00f05dfd6500cea996 WHIRLPOOL 04863a5b5848dd40e94c94cbfcca772a792ee9c5d97c60cad9825ae14aca37165ccb366516325b7c12bdcdadccddbaafea711280c01d6cf9e6c8c4f31bedbfed
|
||||
DIST mingw-w64-v2.0.7.tar.gz 7036448 SHA256 6e38356e0224b5c262beb792f28c23e8c7192b069083f5b0260963e39fbb13b0 SHA512 54a62feacd532129522a0d71e05944eb888c4fcfdfdea5d2bdb740292957e83aafb4ad45b0a1a57902e718be1ce3bc56a0c676e5ceadf1cef33f2e83e85605f5 WHIRLPOOL cc3c4c9daf8abd3dfafeed285c41ab60376e3c628515c1b32001117ff00247f03ae5bc343bfb8454a8e1410064de27b681465964fe9f8225d77ec7be7837294e
|
||||
DIST mingw-w64-v2.0.8.tar.gz 7017057 SHA256 1a5a2c57f90c7f1b5eb8402a52f93de645925a8af62c2cfe748f39ce66008cf4 SHA512 c526bad968c74d86e740862f5e492329b32a1782c69b3a22f7203ac7e38697ba2017f95ed7bf519b737328a92d7c1b4e519f9103d634550f30bdb4a21921303e WHIRLPOOL 913bc444941c4c9c630404847cfb9bb54083fcd366a240e47992d3ee65cfc4c86f340099970243d3d251d5a1e5a00005c09e9d1aecb884256e125155bbcfbd0e
|
||||
|
@ -0,0 +1,74 @@
|
||||
# Copyright 1999-2013 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/dev-util/mingw64-runtime/mingw64-runtime-2.0.8.ebuild,v 1.1 2013/06/20 14:39:13 lu_zero Exp $
|
||||
|
||||
export CBUILD=${CBUILD:-${CHOST}}
|
||||
export CTARGET=${CTARGET:-${CHOST}}
|
||||
if [[ ${CTARGET} == ${CHOST} ]] ; then
|
||||
if [[ ${CATEGORY/cross-} != ${CATEGORY} ]] ; then
|
||||
export CTARGET=${CATEGORY/cross-}
|
||||
fi
|
||||
fi
|
||||
|
||||
inherit flag-o-matic eutils
|
||||
|
||||
DESCRIPTION="Free Win64 runtime and import library definitions"
|
||||
HOMEPAGE="http://mingw-w64.sourceforge.net/"
|
||||
SRC_URI="mirror://sourceforge/mingw-w64/mingw-w64-v${PV}.tar.gz"
|
||||
|
||||
LICENSE="BSD"
|
||||
SLOT="0"
|
||||
KEYWORDS="~amd64 ~x86"
|
||||
IUSE="crosscompile_opts_headers-only"
|
||||
RESTRICT="strip"
|
||||
|
||||
S=${WORKDIR}/mingw-w64-v${PV}/mingw-w64-crt
|
||||
|
||||
is_crosscompile() {
|
||||
[[ ${CHOST} != ${CTARGET} ]]
|
||||
}
|
||||
just_headers() {
|
||||
use crosscompile_opts_headers-only && [[ ${CHOST} != ${CTARGET} ]]
|
||||
}
|
||||
|
||||
pkg_setup() {
|
||||
if [[ ${CBUILD} == ${CHOST} ]] && [[ ${CHOST} == ${CTARGET} ]] ; then
|
||||
die "Invalid configuration"
|
||||
fi
|
||||
}
|
||||
|
||||
src_unpack() {
|
||||
unpack ${A}
|
||||
find "${WORKDIR}" -type f -exec touch -r . {} +
|
||||
}
|
||||
|
||||
src_compile() {
|
||||
# install the local headers as the crt step wants latest
|
||||
pushd ../mingw-w64-headers >/dev/null
|
||||
CHOST=${CTARGET} econf --enable-sdk || die
|
||||
emake install DESTDIR="${WORKDIR}/sysroot" || die
|
||||
popd >/dev/null
|
||||
|
||||
just_headers && return 0
|
||||
|
||||
CHOST=${CTARGET} strip-unsupported-flags
|
||||
append-cppflags -isystem "${WORKDIR}/sysroot/usr/${CTARGET}/include"
|
||||
CHOST=${CTARGET} econf || die
|
||||
emake || die
|
||||
}
|
||||
|
||||
src_install() {
|
||||
insinto /usr/${CTARGET}/usr/include
|
||||
doins -r "${WORKDIR}"/sysroot/usr/${CTARGET}/include/* || die
|
||||
if is_crosscompile ; then
|
||||
# gcc is configured to look at specific hard-coded paths for mingw #419601
|
||||
dosym usr /usr/${CTARGET}/mingw
|
||||
dosym usr /usr/${CTARGET}/${CTARGET}
|
||||
dosym usr/include /usr/${CTARGET}/sys-include
|
||||
fi
|
||||
just_headers && return 0
|
||||
|
||||
emake install DESTDIR="${D}" || die
|
||||
env -uRESTRICT CHOST=${CTARGET} prepallstrip
|
||||
rm -rf "${D}"/usr/doc
|
||||
}
|
@ -1 +1 @@
|
||||
Thu, 20 Jun 2013 13:06:56 +0000
|
||||
Thu, 20 Jun 2013 15:36:54 +0000
|
||||
|
@ -1 +1 @@
|
||||
Thu, 20 Jun 2013 13:06:56 +0000
|
||||
Thu, 20 Jun 2013 15:36:54 +0000
|
||||
|
@ -0,0 +1,11 @@
|
||||
DEFINED_PHASES=compile install setup unpack
|
||||
DESCRIPTION=Free Win64 runtime and import library definitions
|
||||
HOMEPAGE=http://mingw-w64.sourceforge.net/
|
||||
IUSE=crosscompile_opts_headers-only
|
||||
KEYWORDS=~amd64 ~x86
|
||||
LICENSE=BSD
|
||||
RESTRICT=strip
|
||||
SLOT=0
|
||||
SRC_URI=mirror://sourceforge/mingw-w64/mingw-w64-v2.0.8.tar.gz
|
||||
_eclasses_=eutils f31a0ec0d081047cbf9c0bbb4822d831 flag-o-matic d900015de4e092f26d8c0a18b6bd60de multilib 892e597faee02a5b94eb02ab512e7622 toolchain-funcs 7ffd28a8c7eea27218865352bfd3ab2f user d0a4d0735a6c0183d707ca919bd72f28
|
||||
_md5_=f04049e018db3879b8abd2eee47e9a08
|
@ -1,11 +1,11 @@
|
||||
DEFINED_PHASES=compile configure install prepare test unpack
|
||||
DEPEND=>=dev-qt/qtgui-4.6.0:4 >=dev-qt/qtsql-4.6.0:4[sqlite] >=dev-qt/qtwebkit-4.6.0:4 test? ( >=dev-qt/qttest-4.6.0:4 ) zlib? ( virtual/pkgconfig sys-libs/zlib ) test? ( !prefix? ( x11-base/xorg-server[xvfb] ) x11-apps/xhost ) dev-vcs/git
|
||||
DEPEND=>=dev-qt/qtgui-4.6.0:4 >=dev-qt/qtsql-4.6.0:4[sqlite] >=dev-qt/qtwebkit-4.6.0:4 test? ( >=dev-qt/qttest-4.6.0:4 ) zlib? ( virtual/pkgconfig sys-libs/zlib ) test? ( !prefix? ( x11-base/xorg-server[xvfb] ) x11-apps/xhost ) sys-devel/make >=dev-util/cmake-2.8.9 userland_GNU? ( >=sys-apps/findutils-4.4.0 ) dev-vcs/git
|
||||
DESCRIPTION=A Qt IMAP e-mail client
|
||||
EAPI=4
|
||||
EAPI=5
|
||||
HOMEPAGE=http://trojita.flaska.net/
|
||||
IUSE=debug test +zlib test
|
||||
LICENSE=|| ( GPL-2 GPL-3 )
|
||||
RDEPEND=>=dev-qt/qtgui-4.6.0:4 >=dev-qt/qtsql-4.6.0:4[sqlite] >=dev-qt/qtwebkit-4.6.0:4
|
||||
SLOT=0
|
||||
_eclasses_=base ec46b36a6f6fd1d0b505a33e0b74e413 eutils f31a0ec0d081047cbf9c0bbb4822d831 git-2 e92e09651292b1bef5656592364550f7 multilib 892e597faee02a5b94eb02ab512e7622 qt4-r2 ce0c9abfee272185e03ab73f09f5fd69 toolchain-funcs 7ffd28a8c7eea27218865352bfd3ab2f user d0a4d0735a6c0183d707ca919bd72f28 virtualx 73cfc129b4b9ba23aed1abb10c825d86
|
||||
_md5_=63af168c95c8125dce14d0515f10d5f9
|
||||
_eclasses_=base ec46b36a6f6fd1d0b505a33e0b74e413 cmake-utils 66012c9c0ee3c91534d0eb257ff9b95c eutils f31a0ec0d081047cbf9c0bbb4822d831 flag-o-matic d900015de4e092f26d8c0a18b6bd60de git-2 e92e09651292b1bef5656592364550f7 multilib 892e597faee02a5b94eb02ab512e7622 qt4-r2 ce0c9abfee272185e03ab73f09f5fd69 toolchain-funcs 7ffd28a8c7eea27218865352bfd3ab2f user d0a4d0735a6c0183d707ca919bd72f28 virtualx 73cfc129b4b9ba23aed1abb10c825d86
|
||||
_md5_=1425a1f2e98e04592a78a9458f484bf3
|
||||
|
@ -0,0 +1,14 @@
|
||||
DEFINED_PHASES=compile configure install postinst postrm preinst prepare setup test unpack
|
||||
DEPEND=>=dev-libs/glib-2.16 >=dev-libs/libxml2-2.6.18 ncurses? ( sys-libs/ncurses[unicode] dbus? ( python_single_target_python2_7? ( dev-lang/python:2.7 ) dev-python/python-exec[python_targets_python2_7(-)?,python_single_target_python2_7(+)?] ) python? ( python_single_target_python2_7? ( dev-lang/python:2.7 ) dev-python/python-exec[python_targets_python2_7(-)?,python_single_target_python2_7(+)?] ) ) gtk? ( >=x11-libs/gtk+-2.10:2[aqua=] x11-libs/libSM xscreensaver? ( x11-libs/libXScrnSaver ) spell? ( >=app-text/gtkspell-2.0.2:2 ) eds? ( >=gnome-extra/evolution-data-server-3.6 ) prediction? ( >=dev-db/sqlite-3.3:3 ) ) gstreamer? ( =media-libs/gstreamer-0.10* =media-libs/gst-plugins-good-0.10* || ( net-libs/farstream:0.1 net-libs/farsight2 ) media-plugins/gst-plugins-meta:0.10 media-plugins/gst-plugins-gconf:0.10 ) zeroconf? ( net-dns/avahi[dbus] ) dbus? ( >=dev-libs/dbus-glib-0.71 >=sys-apps/dbus-0.90 dev-python/dbus-python ) perl? ( >=dev-lang/perl-5.8.2-r1[-build] ) gadu? ( || ( >=net-libs/libgadu-1.11.0[ssl,gnutls] >=net-libs/libgadu-1.11.0[-ssl] ) ) gnutls? ( net-libs/gnutls ) !gnutls? ( >=dev-libs/nss-3.11 ) meanwhile? ( net-libs/meanwhile ) silc? ( >=net-im/silc-toolkit-1.0.1 ) tcl? ( dev-lang/tcl ) tk? ( dev-lang/tk ) sasl? ( dev-libs/cyrus-sasl:2 ) networkmanager? ( net-misc/networkmanager ) idn? ( net-dns/libidn ) !<x11-plugins/pidgin-facebookchat-1.69-r1 dev-lang/perl dev-perl/XML-Parser virtual/pkgconfig gtk? ( x11-proto/scrnsaverproto >=dev-util/intltool-0.41.1 sys-devel/gettext ) dbus? ( python_single_target_python2_7? ( dev-lang/python:2.7 ) dev-python/python-exec[python_targets_python2_7(-)?,python_single_target_python2_7(+)?] ) doc? ( app-doc/doxygen ) !gtk? ( nls? ( >=dev-util/intltool-0.41.1 sys-devel/gettext ) ) || ( >=sys-devel/automake-1.12:1.12 >=sys-devel/automake-1.13:1.13 ) >=sys-devel/autoconf-2.68 sys-devel/libtool app-arch/xz-utils >=sys-apps/sed-4
|
||||
DESCRIPTION=GTK Instant Messenger client
|
||||
EAPI=5
|
||||
HOMEPAGE=http://pidgin.im/
|
||||
IUSE=dbus debug doc eds gadu gnutls +gstreamer +gtk idn meanwhile mxit networkmanager nls perl silc tcl tk spell sasl ncurses groupwise prediction python +xscreensaver zephyr zeroconf aqua debug python_targets_python2_7 python_single_target_python2_7
|
||||
KEYWORDS=~alpha ~amd64 ~arm ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86 ~x86-freebsd ~amd64-linux ~x86-linux ~x86-macos
|
||||
LICENSE=GPL-2
|
||||
RDEPEND=>=dev-libs/glib-2.16 >=dev-libs/libxml2-2.6.18 ncurses? ( sys-libs/ncurses[unicode] dbus? ( python_single_target_python2_7? ( dev-lang/python:2.7 ) dev-python/python-exec[python_targets_python2_7(-)?,python_single_target_python2_7(+)?] ) python? ( python_single_target_python2_7? ( dev-lang/python:2.7 ) dev-python/python-exec[python_targets_python2_7(-)?,python_single_target_python2_7(+)?] ) ) gtk? ( >=x11-libs/gtk+-2.10:2[aqua=] x11-libs/libSM xscreensaver? ( x11-libs/libXScrnSaver ) spell? ( >=app-text/gtkspell-2.0.2:2 ) eds? ( >=gnome-extra/evolution-data-server-3.6 ) prediction? ( >=dev-db/sqlite-3.3:3 ) ) gstreamer? ( =media-libs/gstreamer-0.10* =media-libs/gst-plugins-good-0.10* || ( net-libs/farstream:0.1 net-libs/farsight2 ) media-plugins/gst-plugins-meta:0.10 media-plugins/gst-plugins-gconf:0.10 ) zeroconf? ( net-dns/avahi[dbus] ) dbus? ( >=dev-libs/dbus-glib-0.71 >=sys-apps/dbus-0.90 dev-python/dbus-python ) perl? ( >=dev-lang/perl-5.8.2-r1[-build] ) gadu? ( || ( >=net-libs/libgadu-1.11.0[ssl,gnutls] >=net-libs/libgadu-1.11.0[-ssl] ) ) gnutls? ( net-libs/gnutls ) !gnutls? ( >=dev-libs/nss-3.11 ) meanwhile? ( net-libs/meanwhile ) silc? ( >=net-im/silc-toolkit-1.0.1 ) tcl? ( dev-lang/tcl ) tk? ( dev-lang/tk ) sasl? ( dev-libs/cyrus-sasl:2 ) networkmanager? ( net-misc/networkmanager ) idn? ( net-dns/libidn ) !<x11-plugins/pidgin-facebookchat-1.69-r1
|
||||
REQUIRED_USE=python? ( python_single_target_python2_7? ( python_targets_python2_7 ) ^^ ( python_single_target_python2_7 ) ) dbus? ( python_single_target_python2_7? ( python_targets_python2_7 ) ^^ ( python_single_target_python2_7 ) )
|
||||
SLOT=0
|
||||
SRC_URI=mirror://sourceforge/pidgin/pidgin-2.10.7.tar.bz2
|
||||
_eclasses_=autotools 16761a2f972abd686713e5967ff3c754 base ec46b36a6f6fd1d0b505a33e0b74e413 eutils f31a0ec0d081047cbf9c0bbb4822d831 fdo-mime 0acfe1a88fd8751a1d5dc671168219fa flag-o-matic d900015de4e092f26d8c0a18b6bd60de gnome.org 8fef8f967214f56e08fa92d61163d891 gnome2 7976d3f4d0c0816c67033d3dcd4d9472 gnome2-utils 794d2847b4af390a1e020924876c8297 libtool b1c8688e60f9580bcb9bb46e08737eb1 multilib 892e597faee02a5b94eb02ab512e7622 multiprocessing a2130e6fc4aa4c6a24b265ca0cbcc2b6 perl-app 20b0a51a72b6d2c8ac53ccab1605737f perl-module ba21eba2562fc2643deeea95fd28665d python-single-r1 7e219c03c7f3c029a5d1030f38aeafef python-utils-r1 9aa9cecaaf78644be7c0b8b8dc814dce toolchain-funcs 7ffd28a8c7eea27218865352bfd3ab2f user d0a4d0735a6c0183d707ca919bd72f28 versionator 6601b4c5b3f019a993db59a50e1854e4
|
||||
_md5_=ec800bc2fc205be7c3263c0e3c80d6ee
|
@ -1,10 +0,0 @@
|
||||
DEFINED_PHASES=install
|
||||
DEPEND=dev-libs/libgpg-error >=dev-libs/libgcrypt-1.2.0
|
||||
DESCRIPTION=(OTR) Messaging allows you to have private conversations over instant messaging
|
||||
HOMEPAGE=http://www.cypherpunks.ca/otr/
|
||||
KEYWORDS=amd64 ~hppa ~ia64 ppc ppc64 sparc x86
|
||||
LICENSE=GPL-2
|
||||
RDEPEND=dev-libs/libgpg-error >=dev-libs/libgcrypt-1.2.0
|
||||
SLOT=0
|
||||
SRC_URI=http://www.cypherpunks.ca/otr/libotr-3.1.0.tar.gz
|
||||
_md5_=d4a6f24a8c9da2d60644f0fc43ad0882
|
@ -1,10 +0,0 @@
|
||||
DEFINED_PHASES=install
|
||||
DEPEND=dev-libs/libgpg-error >=dev-libs/libgcrypt-1.2
|
||||
DESCRIPTION=(OTR) Messaging allows you to have private conversations over instant messaging
|
||||
HOMEPAGE=http://www.cypherpunks.ca/otr/
|
||||
KEYWORDS=~alpha amd64 ~arm hppa ~ia64 ppc ppc64 sparc x86 ~x86-fbsd ~x86-freebsd ~amd64-linux ~ia64-linux ~x86-linux ~ppc-macos ~x86-macos
|
||||
LICENSE=GPL-2
|
||||
RDEPEND=dev-libs/libgpg-error >=dev-libs/libgcrypt-1.2
|
||||
SLOT=0
|
||||
SRC_URI=http://www.cypherpunks.ca/otr/libotr-3.2.0.tar.gz
|
||||
_md5_=97a251bea5db3ee9d648c313d7b461ee
|
@ -1,11 +1,11 @@
|
||||
DEFINED_PHASES=-
|
||||
DEPEND=>=dev-libs/libgcrypt-1.2 dev-libs/libgpg-error
|
||||
DESCRIPTION=(OTR) Messaging allows you to have private conversations over instant messaging
|
||||
EAPI=4
|
||||
EAPI=5
|
||||
HOMEPAGE=http://www.cypherpunks.ca/otr/
|
||||
KEYWORDS=~alpha ~amd64 ~arm ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd ~x86-freebsd ~amd64-linux ~ia64-linux ~x86-linux ~ppc-macos ~x86-macos
|
||||
LICENSE=GPL-2
|
||||
RDEPEND=>=dev-libs/libgcrypt-1.2 dev-libs/libgpg-error
|
||||
SLOT=0
|
||||
SRC_URI=http://www.cypherpunks.ca/otr/libotr-4.0.0.tar.gz
|
||||
_md5_=2b9445af9892aa072c291e4159ca333d
|
||||
_md5_=0cc7f708ea0b20d4a5c368d4d2a08837
|
||||
|
@ -0,0 +1,14 @@
|
||||
DEFINED_PHASES=install postinst prepare prerm setup unpack
|
||||
DEPEND=daemon? ( dev-lang/php[mysql?,postgres?,pcntl,curl] ) !daemon? ( dev-lang/php[mysql?,postgres?,curl] ) || ( virtual/httpd-cgi virtual/httpd-fastcgi ) virtual/httpd-php >=app-admin/webapp-config-1.50.15
|
||||
DESCRIPTION=Tiny Tiny RSS - A web-based news feed (RSS/Atom) aggregator using AJAX
|
||||
EAPI=5
|
||||
HOMEPAGE=http://tt-rss.org/
|
||||
IUSE=daemon +mysql postgres vhosts
|
||||
KEYWORDS=~amd64 ~x86
|
||||
LICENSE=GPL-2
|
||||
RDEPEND=daemon? ( dev-lang/php[mysql?,postgres?,pcntl,curl] ) !daemon? ( dev-lang/php[mysql?,postgres?,curl] ) virtual/httpd-php >=app-admin/webapp-config-1.50.15
|
||||
REQUIRED_USE=|| ( mysql postgres )
|
||||
SLOT=1.8
|
||||
SRC_URI=https://github.com/gothfox/Tiny-Tiny-RSS/archive/1.8.tar.gz -> tt-rss-1.8.tar.gz
|
||||
_eclasses_=depend.apache 1a38534d3f755d1ab1d92ce120bd7dbd depend.php df169a364e191b840b695604097e3c21 eutils f31a0ec0d081047cbf9c0bbb4822d831 multilib 892e597faee02a5b94eb02ab512e7622 phpconfutils e108303831029e5b8a9d24b991b1d62a toolchain-funcs 7ffd28a8c7eea27218865352bfd3ab2f user d0a4d0735a6c0183d707ca919bd72f28 vcs-snapshot 3facff03591093044e38f21285a02129 webapp 25b9b1696f5e698711f47d45c3d45e3e
|
||||
_md5_=b6826e8cebf78a6d54583ba9feef420a
|
@ -0,0 +1,13 @@
|
||||
DEFINED_PHASES=compile configure install postinst postrm preinst prepare test unpack
|
||||
DEPEND=dev-libs/crypto++ x11-libs/libICE x11-libs/libSM x11-libs/libX11 x11-libs/libXext x11-libs/libXi x11-libs/libXinerama x11-libs/libXrandr x11-libs/libXtst qt4? ( dev-qt/qtcore:4 dev-qt/qtgui:4 ) x11-proto/kbproto x11-proto/randrproto x11-proto/xextproto x11-proto/xineramaproto x11-proto/xproto >=sys-apps/sed-4 sys-devel/make >=dev-util/cmake-2.8.9 userland_GNU? ( >=sys-apps/findutils-4.4.0 )
|
||||
DESCRIPTION=Lets you easily share a single mouse and keyboard between multiple computers.
|
||||
EAPI=5
|
||||
HOMEPAGE=http://synergy-foss.org/
|
||||
IUSE=qt4
|
||||
KEYWORDS=~alpha ~amd64 ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd ~x86-freebsd ~amd64-linux ~x86-linux ~x86-macos ~sparc-solaris ~x86-solaris
|
||||
LICENSE=GPL-2
|
||||
RDEPEND=dev-libs/crypto++ x11-libs/libICE x11-libs/libSM x11-libs/libX11 x11-libs/libXext x11-libs/libXi x11-libs/libXinerama x11-libs/libXrandr x11-libs/libXtst qt4? ( dev-qt/qtcore:4 dev-qt/qtgui:4 ) qt4? ( !x11-misc/qsynergy )
|
||||
SLOT=0
|
||||
SRC_URI=http://synergy.googlecode.com/files/synergy-1.4.12-Source.tar.gz http://dev.gentoo.org/~hasufell/distfiles/synergy.png
|
||||
_eclasses_=base ec46b36a6f6fd1d0b505a33e0b74e413 cmake-utils 66012c9c0ee3c91534d0eb257ff9b95c eutils f31a0ec0d081047cbf9c0bbb4822d831 flag-o-matic d900015de4e092f26d8c0a18b6bd60de gnome2-utils 794d2847b4af390a1e020924876c8297 multilib 892e597faee02a5b94eb02ab512e7622 qt4-r2 ce0c9abfee272185e03ab73f09f5fd69 toolchain-funcs 7ffd28a8c7eea27218865352bfd3ab2f user d0a4d0735a6c0183d707ca919bd72f28
|
||||
_md5_=40236abc0fe1166c37e394f7abc67e79
|
@ -1,11 +0,0 @@
|
||||
DEFINED_PHASES=install
|
||||
DEPEND=>=net-libs/libotr-3.2.0 x11-libs/gtk+:2 net-im/pidgin[gtk] virtual/pkgconfig
|
||||
DESCRIPTION=(OTR) Messaging allows you to have private conversations over instant messaging
|
||||
EAPI=2
|
||||
HOMEPAGE=http://www.cypherpunks.ca/otr/
|
||||
KEYWORDS=amd64 ppc x86
|
||||
LICENSE=GPL-2
|
||||
RDEPEND=>=net-libs/libotr-3.2.0 x11-libs/gtk+:2 net-im/pidgin[gtk]
|
||||
SLOT=0
|
||||
SRC_URI=http://www.cypherpunks.ca/otr/pidgin-otr-3.2.0.tar.gz
|
||||
_md5_=eb0186e039986653fa1b759064dd441d
|
@ -1,11 +1,11 @@
|
||||
DEFINED_PHASES=install
|
||||
DEPEND=>=net-libs/libotr-3.2.0 x11-libs/gtk+:2 net-im/pidgin[gtk] virtual/pkgconfig
|
||||
DEFINED_PHASES=-
|
||||
DEPEND=<net-libs/libotr-4.0.0 x11-libs/gtk+:2 net-im/pidgin[gtk] virtual/pkgconfig
|
||||
DESCRIPTION=(OTR) Messaging allows you to have private conversations over instant messaging
|
||||
EAPI=2
|
||||
EAPI=5
|
||||
HOMEPAGE=http://www.cypherpunks.ca/otr/
|
||||
KEYWORDS=amd64 ppc x86
|
||||
LICENSE=GPL-2
|
||||
RDEPEND=>=net-libs/libotr-3.2.0 x11-libs/gtk+:2 net-im/pidgin[gtk]
|
||||
RDEPEND=<net-libs/libotr-4.0.0 x11-libs/gtk+:2 net-im/pidgin[gtk]
|
||||
SLOT=0
|
||||
SRC_URI=http://www.cypherpunks.ca/otr/pidgin-otr-3.2.1.tar.gz
|
||||
_md5_=1eda15ae7dc03c513ebcac095ed40c90
|
||||
_md5_=1f1968c20577c18080ac2f42d32692a1
|
||||
|
@ -1,11 +1,11 @@
|
||||
DEFINED_PHASES=-
|
||||
DEPEND=dev-libs/libgcrypt net-im/pidgin[gtk] >=net-libs/libotr-4.0.0 x11-libs/gtk+:2 dev-util/intltool virtual/pkgconfig
|
||||
DESCRIPTION=(OTR) Messaging allows you to have private conversations over instant messaging
|
||||
EAPI=4
|
||||
EAPI=5
|
||||
HOMEPAGE=http://www.cypherpunks.ca/otr/
|
||||
KEYWORDS=~amd64 ~ppc ~x86
|
||||
LICENSE=GPL-2
|
||||
RDEPEND=dev-libs/libgcrypt net-im/pidgin[gtk] >=net-libs/libotr-4.0.0 x11-libs/gtk+:2
|
||||
SLOT=0
|
||||
SRC_URI=http://www.cypherpunks.ca/otr/pidgin-otr-4.0.0.tar.gz
|
||||
_md5_=3ccf26c727ea57efb14c1b952be7933b
|
||||
_md5_=d507c183278c42af13d80303da246fc2
|
||||
|
@ -1 +1 @@
|
||||
Thu, 20 Jun 2013 13:06:58 +0000
|
||||
Thu, 20 Jun 2013 15:36:57 +0000
|
||||
|
@ -1 +1 @@
|
||||
Thu Jun 20 13:06:55 UTC 2013
|
||||
Thu Jun 20 15:36:54 UTC 2013
|
||||
|
@ -1 +1 @@
|
||||
Thu, 20 Jun 2013 13:30:01 +0000
|
||||
Thu, 20 Jun 2013 16:00:01 +0000
|
||||
|
@ -1 +1 @@
|
||||
1371733501 Thu Jun 20 13:05:01 2013 UTC
|
||||
1371742501 Thu Jun 20 15:35:01 2013 UTC
|
||||
|
Binary file not shown.
@ -0,0 +1,239 @@
|
||||
# Copyright 1999-2013 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/net-im/pidgin/pidgin-2.10.7-r2.ebuild,v 1.2 2013/06/20 14:07:40 polynomial-c Exp $
|
||||
|
||||
EAPI=5
|
||||
|
||||
GENTOO_DEPEND_ON_PERL=no
|
||||
PYTHON_COMPAT=( python2_7 )
|
||||
inherit autotools flag-o-matic eutils toolchain-funcs multilib perl-app gnome2 python-single-r1
|
||||
|
||||
DESCRIPTION="GTK Instant Messenger client"
|
||||
HOMEPAGE="http://pidgin.im/"
|
||||
SRC_URI="mirror://sourceforge/${PN}/${P}.tar.bz2"
|
||||
|
||||
LICENSE="GPL-2"
|
||||
SLOT="0"
|
||||
KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86 ~x86-freebsd ~amd64-linux ~x86-linux ~x86-macos"
|
||||
IUSE="dbus debug doc eds gadu gnutls +gstreamer +gtk idn meanwhile mxit"
|
||||
IUSE+=" networkmanager nls perl silc tcl tk spell sasl ncurses"
|
||||
IUSE+=" groupwise prediction python +xscreensaver zephyr zeroconf" # mono"
|
||||
IUSE+=" aqua"
|
||||
|
||||
# dbus requires python to generate C code for dbus bindings (thus DEPEND only).
|
||||
# finch uses libgnt that links with libpython - {R,}DEPEND. But still there is
|
||||
# no way to build dbus and avoid libgnt linkage with python. If you want this
|
||||
# send patch upstream.
|
||||
# purple-url-handler and purple-remote require dbus-python thus in reality we
|
||||
# rdepend on python if dbus enabled. But it is possible to separate this dep.
|
||||
RDEPEND="
|
||||
>=dev-libs/glib-2.16
|
||||
>=dev-libs/libxml2-2.6.18
|
||||
ncurses? ( sys-libs/ncurses[unicode]
|
||||
dbus? ( ${PYTHON_DEPS} )
|
||||
python? ( ${PYTHON_DEPS} ) )
|
||||
gtk? (
|
||||
>=x11-libs/gtk+-2.10:2[aqua=]
|
||||
x11-libs/libSM
|
||||
xscreensaver? ( x11-libs/libXScrnSaver )
|
||||
spell? ( >=app-text/gtkspell-2.0.2:2 )
|
||||
eds? ( >=gnome-extra/evolution-data-server-3.6 )
|
||||
prediction? ( >=dev-db/sqlite-3.3:3 ) )
|
||||
gstreamer? ( =media-libs/gstreamer-0.10*
|
||||
=media-libs/gst-plugins-good-0.10*
|
||||
|| ( net-libs/farstream:0.1 net-libs/farsight2 )
|
||||
media-plugins/gst-plugins-meta:0.10
|
||||
media-plugins/gst-plugins-gconf:0.10 )
|
||||
zeroconf? ( net-dns/avahi[dbus] )
|
||||
dbus? ( >=dev-libs/dbus-glib-0.71
|
||||
>=sys-apps/dbus-0.90
|
||||
dev-python/dbus-python )
|
||||
perl? ( >=dev-lang/perl-5.8.2-r1[-build] )
|
||||
gadu? ( || ( >=net-libs/libgadu-1.11.0[ssl,gnutls]
|
||||
>=net-libs/libgadu-1.11.0[-ssl] ) )
|
||||
gnutls? ( net-libs/gnutls )
|
||||
!gnutls? ( >=dev-libs/nss-3.11 )
|
||||
meanwhile? ( net-libs/meanwhile )
|
||||
silc? ( >=net-im/silc-toolkit-1.0.1 )
|
||||
tcl? ( dev-lang/tcl )
|
||||
tk? ( dev-lang/tk )
|
||||
sasl? ( dev-libs/cyrus-sasl:2 )
|
||||
networkmanager? ( net-misc/networkmanager )
|
||||
idn? ( net-dns/libidn )
|
||||
!<x11-plugins/pidgin-facebookchat-1.69-r1"
|
||||
# Mono support crashes pidgin
|
||||
#mono? ( dev-lang/mono )"
|
||||
|
||||
# We want nls in case gtk is enabled, bug #
|
||||
NLS_DEPEND=">=dev-util/intltool-0.41.1 sys-devel/gettext"
|
||||
|
||||
DEPEND="$RDEPEND
|
||||
dev-lang/perl
|
||||
dev-perl/XML-Parser
|
||||
virtual/pkgconfig
|
||||
gtk? ( x11-proto/scrnsaverproto
|
||||
${NLS_DEPEND} )
|
||||
dbus? ( ${PYTHON_DEPS} )
|
||||
doc? ( app-doc/doxygen )
|
||||
!gtk? ( nls? ( ${NLS_DEPEND} ) )"
|
||||
|
||||
DOCS="AUTHORS HACKING NEWS README ChangeLog"
|
||||
|
||||
REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )
|
||||
dbus? ( ${PYTHON_REQUIRED_USE} )"
|
||||
|
||||
# Enable Default protocols
|
||||
DYNAMIC_PRPLS="irc,jabber,oscar,yahoo,simple,msn,myspace"
|
||||
|
||||
# List of plugins
|
||||
# app-accessibility/pidgin-festival
|
||||
# net-im/librvp
|
||||
# x11-plugins/guifications
|
||||
# x11-plugins/msn-pecan
|
||||
# x11-plugins/pidgin-encryption
|
||||
# x11-plugins/pidgin-extprefs
|
||||
# x11-plugins/pidgin-hotkeys
|
||||
# x11-plugins/pidgin-latex
|
||||
# x11-plugins/pidgintex
|
||||
# x11-plugins/pidgin-libnotify
|
||||
# x11-plugins/pidgin-mbpurple
|
||||
# x11-plugins/pidgin-bot-sentry
|
||||
# x11-plugins/pidgin-otr
|
||||
# x11-plugins/pidgin-rhythmbox
|
||||
# x11-plugins/purple-plugin_pack
|
||||
# x11-themes/pidgin-smileys
|
||||
# x11-plugins/pidgin-knotify
|
||||
# Plugins in Sunrise:
|
||||
# x11-plugins/pidgin-audacious-remote
|
||||
# x11-plugins/pidgin-autoanswer
|
||||
# x11-plugins/pidgin-birthday-reminder
|
||||
# x11-plugins/pidgin-blinklight
|
||||
# x11-plugins/pidgin-convreverse
|
||||
# x11-plugins/pidgin-embeddedvideo
|
||||
# x11-plugins/pidgin-extended-blist-sort
|
||||
# x11-plugins/pidgin-gfire
|
||||
# x11-plugins/pidgin-lastfm
|
||||
# x11-plugins/pidgin-sendscreenshot
|
||||
# x11-plugins/pidgimpd
|
||||
|
||||
pkg_setup() {
|
||||
if ! use gtk && ! use ncurses ; then
|
||||
elog "You did not pick the ncurses or gtk use flags, only libpurple"
|
||||
elog "will be built."
|
||||
fi
|
||||
if use dbus || { use ncurses && use python; }; then
|
||||
python-single-r1_pkg_setup
|
||||
fi
|
||||
|
||||
# dbus is enabled, no way to disable linkage with python => python is enabled
|
||||
#REQUIRED_USE="gtk? ( nls ) dbus? ( python )"
|
||||
if use gtk && ! use nls; then
|
||||
ewarn "gtk build => nls is enabled!"
|
||||
fi
|
||||
if use dbus && ! use python; then
|
||||
elog "dbus is enabled, no way to disable linkage with python => python is enabled"
|
||||
fi
|
||||
}
|
||||
|
||||
src_prepare() {
|
||||
epatch "${FILESDIR}/${PN}-2.10.0-gold.patch" \
|
||||
"${FILESDIR}/${P}-fix-cap.patch" \
|
||||
"${FILESDIR}/${P}-link_sasl_in_irc_plugin.patch" \
|
||||
"${FILESDIR}/${PN}-eds-3.6.patch.bz2"
|
||||
|
||||
epatch_user
|
||||
|
||||
eautoreconf
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
# Stabilize things, for your own good
|
||||
strip-flags
|
||||
replace-flags -O? -O2
|
||||
|
||||
local myconf
|
||||
|
||||
if use gadu; then
|
||||
DYNAMIC_PRPLS="${DYNAMIC_PRPLS},gg"
|
||||
myconf="${myconf} --with-gadu-includes=."
|
||||
myconf="${myconf} --with-gadu-libs=."
|
||||
fi
|
||||
|
||||
use groupwise && DYNAMIC_PRPLS+=",novell"
|
||||
use silc && DYNAMIC_PRPLS+=",silc"
|
||||
use meanwhile && DYNAMIC_PRPLS+=",sametime"
|
||||
use mxit && DYNAMIC_PRPLS+=",mxit"
|
||||
use zephyr && DYNAMIC_PRPLS+=",zephyr"
|
||||
use zeroconf && DYNAMIC_PRPLS+=",bonjour"
|
||||
|
||||
if use gnutls; then
|
||||
einfo "Disabling NSS, using GnuTLS"
|
||||
myconf+=" --enable-nss=no --enable-gnutls=yes"
|
||||
myconf+=" --with-gnutls-includes=${EPREFIX}/usr/include/gnutls"
|
||||
myconf+=" --with-gnutls-libs=${EPREFIX}/usr/$(get_libdir)"
|
||||
else
|
||||
einfo "Disabling GnuTLS, using NSS"
|
||||
myconf+=" --enable-gnutls=no --enable-nss=yes"
|
||||
fi
|
||||
|
||||
if use dbus || { use ncurses && use python; }; then
|
||||
myconf+=" --with-python=${PYTHON}"
|
||||
else
|
||||
myconf+=" --without-python"
|
||||
fi
|
||||
|
||||
econf \
|
||||
$(use_enable ncurses consoleui) \
|
||||
$(use_enable gtk gtkui) \
|
||||
$(use_enable gtk sm) \
|
||||
$(use gtk || use_enable nls) \
|
||||
$(use gtk && echo "--enable-nls") \
|
||||
$(use gtk && use_enable xscreensaver screensaver) \
|
||||
$(use gtk && use_enable prediction cap) \
|
||||
$(use gtk && use_enable eds gevolution) \
|
||||
$(use gtk && use_enable spell gtkspell) \
|
||||
$(use_enable perl) \
|
||||
$(use_enable tk) \
|
||||
$(use_enable tcl) \
|
||||
$(use_enable debug) \
|
||||
$(use_enable dbus) \
|
||||
$(use_enable meanwhile) \
|
||||
$(use_enable gstreamer) \
|
||||
$(use_enable gstreamer farstream) \
|
||||
$(use_enable gstreamer vv) \
|
||||
$(use_enable sasl cyrus-sasl ) \
|
||||
$(use_enable doc doxygen) \
|
||||
$(use_enable networkmanager nm) \
|
||||
$(use_enable zeroconf avahi) \
|
||||
$(use_enable idn) \
|
||||
--with-system-ssl-certs="${EPREFIX}/etc/ssl/certs/" \
|
||||
--with-dynamic-prpls="${DYNAMIC_PRPLS}" \
|
||||
--disable-mono \
|
||||
--x-includes="${EPREFIX}"/usr/include/X11 \
|
||||
${myconf}
|
||||
#$(use_enable mono) \
|
||||
}
|
||||
|
||||
src_install() {
|
||||
gnome2_src_install
|
||||
if use gtk; then
|
||||
# Fix tray pathes for kde-3.5, e16 (x11-wm/enlightenment) and other
|
||||
# implementations that are not complient with new hicolor theme yet, #323355
|
||||
local pixmapdir
|
||||
for d in 16 22 32 48; do
|
||||
pixmapdir=${ED}/usr/share/pixmaps/pidgin/tray/hicolor/${d}x${d}/actions
|
||||
mkdir "${pixmapdir}" || die
|
||||
pushd "${pixmapdir}" >/dev/null || die
|
||||
for f in ../status/*; do
|
||||
ln -s ${f} || die
|
||||
done
|
||||
popd >/dev/null
|
||||
done
|
||||
fi
|
||||
use perl && fixlocalpod
|
||||
|
||||
dodoc finch/plugins/pietray.py
|
||||
docompress -x /usr/share/doc/${PF}/pietray.py
|
||||
|
||||
prune_libtool_files --all
|
||||
}
|
@ -1,4 +1,2 @@
|
||||
DIST libotr-3.1.0.tar.gz 428444 SHA256 721560bba21ec7e54c75925de26fe7b59ecdaf9c9b81613a052a3d86b72d7ef4
|
||||
DIST libotr-3.2.0.tar.gz 430299 SHA256 d83b9d20e36e2a4a55e5336f15d1d218d627bc0af7af94e3835bdc8b6d8b6693 SHA512 1f2b3b986128e51f771b80b40593e1b88abd6268b65f94b489548a8355632b860bbce53609aacdcc5b354ba7deaf98ac02f47d9827af82cfbf62d1c6b689d61f WHIRLPOOL 9e1c5868305f545b90112400790cb730835f8cc4ea2087c5bb8cc6b3d4a41b3071eb872b0cea69b26421b9332d207570d1681cb80204daf97a84712f16fae289
|
||||
DIST libotr-3.2.1.tar.gz 414684 SHA256 d428eaa584984baa09450cca07742e0ac8fc62401f3a1c556e3025023369cdf4 SHA512 7dfac85cb7dd1a95481330ecf3bfe54477a9de7e20370919386e8aa9553e374a2d3587d7b4bb654d1a30bd1c47e41c577f7b78f4007c5cb97f2f6a2c63078899 WHIRLPOOL 96593df2cc3f5e5e606e14170c3706b1dc17f2142821d827d2e5ae1473b923eacc95909f489f18a700539e07de2042e39df36157f724ba79916591c8ccca594b
|
||||
DIST libotr-4.0.0.tar.gz 441441 SHA256 3f911994409898e74527730745ef35ed75c352c695a1822a677a34b2cf0293b4 SHA512 3f0a549bb615d6ff486db0efcc82fc6ad17c5860740c760315d5c81d298b00648d11f9da69c65b9859111d2150e4d10062aeb8611810f11e1da1ce62f07f02b6 WHIRLPOOL 29614fd709358d5363b2204c38e5fc6984acb56c880ae05706b464bddb7832f0a6e9af03a689135423909e26cdaecb2ca1a13f9c02c21a4477149432dfcd6aef
|
||||
|
@ -1,20 +0,0 @@
|
||||
# Copyright 1999-2009 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/net-libs/libotr/libotr-3.1.0.ebuild,v 1.9 2009/08/22 15:52:50 halcy0n Exp $
|
||||
|
||||
DESCRIPTION="(OTR) Messaging allows you to have private conversations over instant messaging"
|
||||
HOMEPAGE="http://www.cypherpunks.ca/otr/"
|
||||
SRC_URI="http://www.cypherpunks.ca/otr/${P}.tar.gz"
|
||||
|
||||
LICENSE="GPL-2"
|
||||
SLOT="0"
|
||||
KEYWORDS="amd64 ~hppa ~ia64 ppc ppc64 sparc x86"
|
||||
IUSE=""
|
||||
|
||||
DEPEND="dev-libs/libgpg-error
|
||||
>=dev-libs/libgcrypt-1.2.0"
|
||||
|
||||
src_install() {
|
||||
make install DESTDIR="${D}" || die "Install failed"
|
||||
dodoc ChangeLog README
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
# Copyright 1999-2010 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/net-libs/libotr/libotr-3.2.0.ebuild,v 1.13 2010/01/19 02:26:34 jer Exp $
|
||||
|
||||
DESCRIPTION="(OTR) Messaging allows you to have private conversations over instant messaging"
|
||||
HOMEPAGE="http://www.cypherpunks.ca/otr/"
|
||||
SRC_URI="http://www.cypherpunks.ca/otr/${P}.tar.gz"
|
||||
|
||||
LICENSE="GPL-2"
|
||||
SLOT="0"
|
||||
KEYWORDS="~alpha amd64 ~arm hppa ~ia64 ppc ppc64 sparc x86 ~x86-fbsd ~x86-freebsd ~amd64-linux ~ia64-linux ~x86-linux ~ppc-macos ~x86-macos"
|
||||
IUSE=""
|
||||
|
||||
RDEPEND="dev-libs/libgpg-error
|
||||
>=dev-libs/libgcrypt-1.2"
|
||||
DEPEND="${RDEPEND}"
|
||||
|
||||
src_install() {
|
||||
emake DESTDIR="${D}" install || die
|
||||
dodoc ChangeLog README
|
||||
}
|
@ -1,3 +1,4 @@
|
||||
DIST tt-rss-1.7.8.tar.gz 2391937 SHA256 5e5a6d82a112eb48259b733207c18a718c338038c33ec8ffc87895d57e05f3cb SHA512 d18579128c337f7ecd2265b90e876de3eaa541291b7bdaf1244ada28438029cefeb1bfd8045d3de2b8d100e09185f89af04e1d9dbafd1f5e1e89a641ce783662 WHIRLPOOL f66423e12cb968b07b3c9bf15f2da8e06e054c1a3798260e2d0aee4d3f042996a86b52f65717a4ceaebeffc2b14109fafd9c05a08ffb7440a2f785d9a446465c
|
||||
DIST tt-rss-1.7.9.tar.gz 2321780 SHA256 972f0f8a1033f076093ad6ff6480a0c32166bddeec217c5176da19afd021e3ff SHA512 383e1542aa3c8e5387223ee321a0957c4597e9e9d9814017014b8647efecf350f483530165ecdb5268d35747a8f78a2f006108b3fe298a3de6f9cf423633927f WHIRLPOOL 37c1cec972cbe20f1ef376bbb8df1befa8f620f2e02214d5c75cdb28cd2bbf90ae148aaeca1e1802e25d53157feaa8cebbf9773bc752f39b16e4dbdfb9862b15
|
||||
DIST tt-rss-1.8.tar.gz 2339850 SHA256 5b12380938f1d465218d2c30e3996eccfae71e9e920d63c960a1e0e66b42738a SHA512 75fb5e78c78894e64990bc29c573ee4bdf8c8d0d2a9d35c5ee199148e21f6b6a15d907b9a78ddb55d9173a5bdd8e00ff0868ca4aa357535a5a5795c70c0bb205 WHIRLPOOL 7a2ec9461f6e603a45205629167773bb0e860a6d81ab40e11d418700d82c2ac0fdbe9681596b87a1cb3255cb19f0051bc92e2122981f79c8a45ea473c59aae10
|
||||
DIST ttrss-1.7.9-patches.tar.xz 22528 SHA256 ead35720dc4de6978a8f2d1c8572e00941d2bf969446e76b33ac10ee8f63341e SHA512 9c09012a7a9d1fba7c1465ca308d3ddc753f0b9192b05c1fa0afb9f5a0c68558f7f4d8a768b6386fa5a0e3855b388559255176c297a3b808eca66ced04658c10 WHIRLPOOL 2b45c901aed4b5c745ac5b5766f862ed4bc8f3e135a9e287dec1f5fcb5df629d86cd14744d065b6970da2b5514955238169bca87645945cbe653827b430ce09c
|
||||
|
@ -0,0 +1,79 @@
|
||||
# Copyright 1999-2013 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/www-apps/tt-rss/tt-rss-1.8.ebuild,v 1.1 2013/06/20 13:02:05 scarabeus Exp $
|
||||
|
||||
EAPI=5
|
||||
|
||||
inherit user eutils webapp depend.php depend.apache vcs-snapshot
|
||||
|
||||
DESCRIPTION="Tiny Tiny RSS - A web-based news feed (RSS/Atom) aggregator using AJAX"
|
||||
HOMEPAGE="http://tt-rss.org/"
|
||||
SRC_URI="https://github.com/gothfox/Tiny-Tiny-RSS/archive/${PV}.tar.gz -> ${P}.tar.gz"
|
||||
|
||||
LICENSE="GPL-2"
|
||||
KEYWORDS="~amd64 ~x86"
|
||||
IUSE="daemon +mysql postgres"
|
||||
|
||||
DEPEND="
|
||||
daemon? ( dev-lang/php[mysql?,postgres?,pcntl,curl] )
|
||||
!daemon? ( dev-lang/php[mysql?,postgres?,curl] )
|
||||
"
|
||||
RDEPEND="${DEPEND}"
|
||||
|
||||
REQUIRED_USE="|| ( mysql postgres )"
|
||||
|
||||
need_httpd_cgi
|
||||
need_php_httpd
|
||||
|
||||
pkg_setup() {
|
||||
webapp_pkg_setup
|
||||
|
||||
if use daemon; then
|
||||
enewgroup ttrssd
|
||||
enewuser ttrssd -1 /bin/sh /dev/null ttrssd
|
||||
fi
|
||||
}
|
||||
|
||||
src_prepare() {
|
||||
# Customize config.php so that the right 'DB_TYPE' is already set (according to the USE flag)
|
||||
einfo "Customizing config.php..."
|
||||
mv config.php{-dist,} || die "Could not rename config.php-dist to config.php."
|
||||
|
||||
if use mysql && ! use postgres; then
|
||||
sed -i \
|
||||
-e "/define('DB_TYPE',/{s:pgsql:mysql:}" \
|
||||
config.php || die
|
||||
fi
|
||||
|
||||
sed -i \
|
||||
-e "/define('DB_TYPE',/{s:// \(or mysql\):// pgsql \1:}" \
|
||||
config.php || die
|
||||
|
||||
# per 462578
|
||||
epatch_user
|
||||
}
|
||||
|
||||
src_install() {
|
||||
webapp_src_preinst
|
||||
|
||||
insinto "/${MY_HTDOCSDIR}"
|
||||
doins -r *
|
||||
keepdir "/${MY_HTDOCSDIR}"/feed-icons
|
||||
|
||||
for DIR in cache lock feed-icons; do
|
||||
webapp_serverowned -R "${MY_HTDOCSDIR}/${DIR}"
|
||||
done
|
||||
|
||||
webapp_configfile "${MY_HTDOCSDIR}"/config.php
|
||||
if use daemon; then
|
||||
webapp_postinst_txt en "${FILESDIR}"/postinstall-en-with-daemon.txt
|
||||
newinitd "${FILESDIR}"/ttrssd.initd-r1 ttrssd
|
||||
newconfd "${FILESDIR}"/ttrssd.confd-r1 ttrssd
|
||||
insinto /etc/logrotate.d/
|
||||
newins "${FILESDIR}"/ttrssd.logrotated ttrssd
|
||||
else
|
||||
webapp_postinst_txt en "${FILESDIR}"/postinstall-en.txt
|
||||
fi
|
||||
|
||||
webapp_src_install
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
DIST synergy-1.4.10-Source.tar.gz 3598533 SHA256 06d5a2ceb4cf8808cdab22441897c7b54ec8b4bc8351ac116f9accf54c720fbe SHA512 d8ebff1d53d16f6abb9cc64c7cd2ac5d6923b61ff3773f32d464cb58a0440bdbaa74836662d4c83e541516b4abda97f35855239cd12b6b095535fd38e36f238c WHIRLPOOL 86a8595403b5fb4efe88f4ea2cc528f541ea2cdb195254637ef077971ccc4cea3261d93fa2b8696fd39740a1421530c55099048399dbabe0e183f26da7a3c610
|
||||
DIST synergy-1.4.12-Source.tar.gz 3954996 SHA256 35b60c8d73368a0cb90daa629e64f66171b934a799a82427431979cca7260849 SHA512 5305e03d871e5408640ece55364067418f9b8b160dda31f994ebafe807b31291bdaa688a901f2e81710acb0857952c37f0c1823a50c927573feaec0c8659be9d WHIRLPOOL 1ba49a12ad5dc7853167c1ddcda032e876a94e9fa76e2250da96dea56353cdcd7bf00917346042aa7f737b3fd386da2d0b440e95d81f51f16d8fc3d3079c6b27
|
||||
DIST synergy-1.4.5-Source.tar.gz 3002836 SHA256 69e9ea11bdd05252886fe6a47fc43735bdc8a5af9dc2b843f4c34de1f0515ad1
|
||||
DIST synergy-1.4.7-Source.tar.gz 2998229 SHA256 e224d2ab822dc7b6e90a87587ed7d9e32f27d05efebc8430ecf61b3610baea3b
|
||||
DIST synergy.png 26910 SHA256 c7e6cbaea549a189daed46c7170477772d932144ca20c9ea0db6859bd896f08c SHA512 0b5a1813c71fd2923adca4cf7b0f840fc37c73a2f18ad68f8bb2fd2ea312d9a884e2e2bcd78f6dd0f13d1f31ea3991379e141ec62d970a18c3a9c46b26720c5d WHIRLPOOL 7b3e7f9b05462fb536de0ca8d2257ea8abc0b2f17f0335d7eee73322f79a9ecccf729b992e58cd0965a9c9842f48020b6588cd4af47ea0f6d2b2cd7793c64e3a
|
||||
|
@ -0,0 +1,74 @@
|
||||
--- a/tools/CMakeLists.txt
|
||||
+++ b/tools/CMakeLists.txt
|
||||
@@ -13,24 +13,6 @@
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
-set(cpp_dir cryptopp562)
|
||||
-
|
||||
-file(GLOB cpp_src ${cpp_dir}/*.cpp)
|
||||
-
|
||||
-if (WIN32)
|
||||
- file(GLOB cpp_hdr ${cpp_dir}/*.h)
|
||||
- list(APPEND cpp_src ${cpp_hdr})
|
||||
-endif()
|
||||
-
|
||||
-file(GLOB cpp_ignore
|
||||
- ${cpp_dir}/simple.cpp
|
||||
- ${cpp_dir}/strciphr.cpp
|
||||
- ${cpp_dir}/polynomi.cpp
|
||||
- ${cpp_dir}/eprecomp.cpp
|
||||
- ${cpp_dir}/eccrypto.cpp
|
||||
- ${cpp_dir}/algebra.cpp)
|
||||
-list(REMOVE_ITEM cpp_src ${cpp_ignore})
|
||||
-
|
||||
# if 64-bit windows, compile asm file.
|
||||
if (CMAKE_CL_64)
|
||||
list(APPEND cpp_src ${cpp_dir}/x64dll.asm ${cpp_dir}/x64masm.asm)
|
||||
@@ -60,5 +42,3 @@
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
|
||||
endif()
|
||||
endif()
|
||||
-
|
||||
-add_library(cryptopp STATIC ${cpp_src})
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -128,6 +128,10 @@
|
||||
|
||||
endif()
|
||||
|
||||
+ set(CMAKE_REQUIRED_LIBRARIES crypto++)
|
||||
+ set(CMAKE_REQUIRED_LIBRARIES)
|
||||
+ set(CMAKE_INCLUDE_DIRECTORIES)
|
||||
+
|
||||
check_type_size(char SIZEOF_CHAR)
|
||||
check_type_size(int SIZEOF_INT)
|
||||
check_type_size(long SIZEOF_LONG)
|
||||
--- a/src/lib/synergy/CCryptoMode.h
|
||||
+++ b/src/lib/synergy/CCryptoMode.h
|
||||
@@ -17,9 +17,9 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
-#include <cryptopp562/gcm.h>
|
||||
-#include <cryptopp562/modes.h>
|
||||
-#include <cryptopp562/aes.h>
|
||||
+#include <crypto++/gcm.h>
|
||||
+#include <crypto++/modes.h>
|
||||
+#include <crypto++/aes.h>
|
||||
#include "ECryptoMode.h"
|
||||
#include "CString.h"
|
||||
|
||||
--- a/src/lib/synergy/CCryptoStream.h
|
||||
+++ b/src/lib/synergy/CCryptoStream.h
|
||||
@@ -20,8 +20,8 @@
|
||||
#include "BasicTypes.h"
|
||||
#include "CStreamFilter.h"
|
||||
#include "CCryptoMode.h"
|
||||
-#include <cryptopp562/osrng.h>
|
||||
-#include <cryptopp562/sha.h>
|
||||
+#include <crypto++/osrng.h>
|
||||
+#include <crypto++/sha.h>
|
||||
|
||||
class CCryptoOptions;
|
||||
|
@ -0,0 +1,93 @@
|
||||
# Copyright 1999-2013 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/x11-misc/synergy/synergy-1.4.12.ebuild,v 1.1 2013/06/20 14:30:09 jer Exp $
|
||||
|
||||
EAPI=5
|
||||
|
||||
inherit eutils flag-o-matic gnome2-utils cmake-utils qt4-r2
|
||||
|
||||
DESCRIPTION="Lets you easily share a single mouse and keyboard between multiple computers."
|
||||
HOMEPAGE="http://synergy-foss.org/"
|
||||
SRC_URI="http://${PN}.googlecode.com/files/${P}-Source.tar.gz
|
||||
http://dev.gentoo.org/~hasufell/distfiles/${PN}.png"
|
||||
|
||||
LICENSE="GPL-2"
|
||||
SLOT="0"
|
||||
KEYWORDS="~alpha ~amd64 ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd ~x86-freebsd ~amd64-linux ~x86-linux ~x86-macos ~sparc-solaris ~x86-solaris"
|
||||
IUSE="qt4"
|
||||
|
||||
COMMON_DEPEND="
|
||||
dev-libs/crypto++
|
||||
x11-libs/libICE
|
||||
x11-libs/libSM
|
||||
x11-libs/libX11
|
||||
x11-libs/libXext
|
||||
x11-libs/libXi
|
||||
x11-libs/libXinerama
|
||||
x11-libs/libXrandr
|
||||
x11-libs/libXtst
|
||||
qt4? ( dev-qt/qtcore:4 dev-qt/qtgui:4 )
|
||||
"
|
||||
DEPEND="${COMMON_DEPEND}
|
||||
x11-proto/kbproto
|
||||
x11-proto/randrproto
|
||||
x11-proto/xextproto
|
||||
x11-proto/xineramaproto
|
||||
x11-proto/xproto
|
||||
"
|
||||
RDEPEND="${COMMON_DEPEND}
|
||||
qt4? ( !x11-misc/qsynergy )
|
||||
"
|
||||
|
||||
PATCHES=( "${FILESDIR}/${P}-cryptopp.patch" )
|
||||
|
||||
S=${WORKDIR}/${P}-Source
|
||||
|
||||
src_configure() {
|
||||
cmake-utils_src_configure
|
||||
|
||||
if use qt4 ; then
|
||||
cd src/gui
|
||||
qt4-r2_src_configure
|
||||
fi
|
||||
}
|
||||
|
||||
src_compile() {
|
||||
cmake-utils_src_compile
|
||||
|
||||
if use qt4 ; then
|
||||
cd src/gui
|
||||
qt4-r2_src_compile
|
||||
fi
|
||||
}
|
||||
|
||||
src_install () {
|
||||
dobin bin/${PN}{c,s}
|
||||
|
||||
if use qt4 ; then
|
||||
newbin bin/${PN} qsynergy
|
||||
newicon -s 256 "${DISTDIR}"/${PN}.png q${PN}.png
|
||||
make_desktop_entry q${PN} ${PN/s/S} q${PN} Utility;
|
||||
fi
|
||||
|
||||
insinto /etc
|
||||
newins doc/synergy.conf.example synergy.conf
|
||||
|
||||
mv doc/${PN}c.man doc/${PN}c.1 || die
|
||||
mv doc/${PN}s.man doc/${PN}s.1 || die
|
||||
doman doc/${PN}{c,s}.1
|
||||
|
||||
dodoc README doc/synergy.conf.example* ChangeLog
|
||||
}
|
||||
|
||||
pkg_preinst() {
|
||||
use qt4 && gnome2_icon_savelist
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
use qt4 && gnome2_icon_cache_update
|
||||
}
|
||||
|
||||
pkg_postrm() {
|
||||
use qt4 && gnome2_icon_cache_update
|
||||
}
|
@ -1,3 +1,2 @@
|
||||
DIST pidgin-otr-3.2.0.tar.gz 435146 SHA256 0870858b06d90cb522b93a354435f7645a9e28cff2d4bae929a6455d4cd1e6b2
|
||||
DIST pidgin-otr-3.2.1.tar.gz 409238 SHA256 ce17e9769e3853076d80645adafaa866e7d7188f988d28a9793afc32c85cb979
|
||||
DIST pidgin-otr-3.2.1.tar.gz 409238 SHA256 ce17e9769e3853076d80645adafaa866e7d7188f988d28a9793afc32c85cb979 SHA512 97ae7362c153fecaf838b5aade2ed57cceb7b6204049e851c07b7d9460c8dcf3a3955efc33821deaf3435103f874a285e9868204bbed64e793f0edaecabe37fa WHIRLPOOL 063f5768c6fd35b50656a7540be110f064ae7c01c1838b74a9481700aade78131497ffe10606f01ba803f07d5c1a73de3b53e943091bec44a09f69b8f3789017
|
||||
DIST pidgin-otr-4.0.0.tar.gz 459591 SHA256 d56b3f092dbe9ee6597641c7d2dd294884dc04ba47aaf4ec571cd54977df4691 SHA512 5f74da77d0c72576bb4a510b41bc70f041ab2555554b4d37376073f2edee8e1021c153cf5cc3d32bd276bdee643e9e7d881026628240a8757e5f8974c200f3d7 WHIRLPOOL 80c58c166669b39655471f23a3c186cb29bbb8d0d08f1f6b458132712bc9818fc8da9c07d4580e51398591fe0375df625b8a1e985836994f6fba5122cb1e8426
|
||||
|
@ -1,25 +0,0 @@
|
||||
# Copyright 1999-2012 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
# $Header: /var/cvsroot/gentoo-x86/x11-plugins/pidgin-otr/pidgin-otr-3.2.0.ebuild,v 1.10 2012/06/09 19:10:23 armin76 Exp $
|
||||
|
||||
EAPI=2
|
||||
|
||||
DESCRIPTION="(OTR) Messaging allows you to have private conversations over instant messaging"
|
||||
HOMEPAGE="http://www.cypherpunks.ca/otr/"
|
||||
SRC_URI="http://www.cypherpunks.ca/otr/${P}.tar.gz"
|
||||
|
||||
LICENSE="GPL-2"
|
||||
SLOT="0"
|
||||
KEYWORDS="amd64 ppc x86"
|
||||
IUSE=""
|
||||
|
||||
RDEPEND=">=net-libs/libotr-3.2.0
|
||||
x11-libs/gtk+:2
|
||||
net-im/pidgin[gtk]"
|
||||
DEPEND="${RDEPEND}
|
||||
virtual/pkgconfig"
|
||||
|
||||
src_install() {
|
||||
emake DESTDIR="${D}" install || die
|
||||
dodoc ChangeLog README
|
||||
}
|
Loading…
Reference in new issue